I think you're just misunderstanding how these apps work, both for HTML5 and for Android native apps.
Your typical Android "native" app (which does not actually use the NDK) expresses its user interface in a text file containing XML, with Java event handlers attached to it to respond to various user actions. This XML is parsed at runtime and the corresponding Android UI toolkit objects are created.
Both can use OpenGL via the appropriate language bindings (WebGL in the case of HTML5 apps), but typically neither one actually does, leaving that up to the runtime (the browser in the case of the HTML5 appe, the Android runtime libraries for Android native apps) instead.
For a locally installed HTML5 app there are no sockets or TCP involved in a web browser: just reading (or mmapping) data from persistent storage.
If you actually look at the design documents for FirefoxOS they discuss this issue directly. There are actually _fewer_ layers there for rendering than there are for non-NDK Android apps.