I've been trying to research (with no real luck) whether the cache size limits are cumulative over a domain between localStorage, sessionStorage, and the cache manifest. (I believe they are for the first two, not sure if using the manifest cuts into the quota for local/session storage).
But, as for your first point, in my situation, it would not be a tenable result to prompt a user to increase the local storage limit another 5MB. (too unpredictable which button they will push and severely degrades the user experience).
Note: I came to this conclusion after writing my application first using webSQL. There was both a noticeable delay when inserting the rows into the local db (especially with older iOS devices) and the size limit prompting was an issue. There is no such delay when using a json variable once the variable is loaded into the cache.
In addition, we tried to reconcile the issue of legacy support for localStorage on mobile devices and came to this conclusion. If the mobile device did not support localStorage the default would likely have to be the normal page lookup via ajax. So, you wouldn't get the speed increase between page change. However, even if the legacy mobile device didn't support localStorage (or cache manifest for that matter) they would still likely support javascript. If the pages are served up via the JSON variable you would still get the fast page change and would only give up the offline mode.