With mvsqlite it is applied to the transaction's own snapshot of the database. Changes are not visible globally until transaction commit. That's what we get from page-level MVCC.
> More over, without WAL, SQLite to the best of my knowledge would require read-lock on every read as well
Reads are also MVCC. Data is fetched from a consistent and clean snapshot of the database, without uncommitted data.