The clients would just send ajax queries with range headers to get the parts of the database that they want.
It is going to be read only.
Locking wouldn't be problem because in the eyes of the sqlite running in the browser it would have it's own read only copy of the database.
> The upper bound on [the number of keys on an interior b-tree page] is as many keys as will fit on the page.
I think a tricky part of this idea would be the locking. Usually SQLite relies on the locking of the underlying filesystem. You could add your own mechanism that causes a lock to be assigned to a single client connection, but what if it never unlocks? (On a single machine you can tell if the client process has crashed.) You could add a timeout but what if the client process then does respond?
[1] https://www.sqlite.org/pragma.html#pragma_page_size
[2] https://www.sqlite.org/fileformat2.html#b_tree_pages