1. When I do VDatabase.Flush, is it "emptied" ?
Not always - better say "journal is invalidated". I mean even if it's not empty it would not be used after reopen database to restore.
if I do VTable1.Update but not any Flush before the crash
In most of cases you will loss this changes. But if there are few operations after update db.Flush can be called internally, so you will get the "last known consistent state" after restoring the db.
if I do VDatabase.Flush and next, VTable1.Update before the crash
VDatabase.Flush is just something like "store-point/save-point". It is guaranteed that all the changes before "flush" is durable and would not be lost.
if I do VTable1.Update and next, VTable1.Flush before the crash
Actually VTable1.Flush do nothing regarding to journal - it is only about emptying the internal cache writing out dirty table's data to the disk.
In other words it is the same case as "if I do VTable1.Update but not any Flush before the crash".
if I do VTable1.Update and next, VDatabase.Flush before the crash
Your "update" will be fixed on disk and will not be reverted after the db restore.