First, check out appcachefacts.info to gain a better understanding of this confusing spec.
AppCache will often work in unexpected ways, like Jake Archibald explains in his blog post Application Cache is a Douchebag.
In it, the behaviour described above is achieved by doing some iframe magic. I got away by just adding a static page to the appcache manifest and loading body content through AJAX calls of non-cached fragment pages, based on external events like onClick, and storing the body data in a WebSQL database for future (possibly offline) reference. This, in effect, had made my offline app entirely JavaScript-based without any page reloads.
In place of WebSQL, you may also use HTML5 local storage but may feel uneasy about the 5MB storage limit.
As to the whys, I can only speculate. I think that:
- Appcache will not store files until explicitly deleted, so that the appcache size will remain modest. In the Wikipedia example, it seems a bad idea to cache every visited page and never clear (possibly deleted!) pages.
- Files in the manifest are not re-checked on every page reload because this would mean an explosive growth of server requests. If your manifest file contains 30 files, it would send out 30 extra requests on every page load. Even if they are performed asynchronous, this is unacceptable.