I'm not sure if you want an answer from a JS or Construct user perspective, so in terms of JS...
1. It's up to the browser implementation. There's probably a combination of in-memory cache and direct storage access to balance performance, memory usage and reliability.
2. It varies per browser, but generally is a proportion of the free disk space. This page explains some of the calculations (although I'm not sure if it changes when you do "Add to desktop" etc.) I think that StackOverflow answer is well out of date; even mobile browsers let you store much more than 5-12mb now.
3. The API that modern web apps actually use is IndexedDB. We typically use it wrapped by the localforage library which works pretty well. All web storage in both C2 and C3 uses this library. (On this point the LocalStorage plugin is confusingly named because it really uses IndexedDB via localforage; the actual Local Storage API is old and deprecated, but "local storage" still describes what the plugin does.)
I'm not sure why you're worried about anything like memory usage, unless you've actually seen some measurements indicating a problem? Browsers are really well engineered, they're not going to do something dumb like load 1 GB of storage in to RAM. Also, using more memory does not directly correlate with slowing the game down. You can store loads of memory and still have lightning fast performance.