Well... let's dive I guess.
So at the core, you probably need:
* Something like an assembly specification
* Something like a memory model specification
* lots of other stuff like a common binary program format, but I digress
The JVM and WASM provide those. Flash did that too... sorta, just without a formal or open specification (not so great).
The final piece missing is probably a way to render 'stuff', probably in a vector format, so the device could rasterize it. So yeah, another formal specification here, something 'like' SVG.
So maybe if browsers only supported SVG and said SVG data could be produced by executing some sort of pluggable backend (like a JVM or WASM environment), you'd have a pretty cool system that could do anything.
But this sorta misses the whole point of HTML. Originally back in like 1997, all stuff on the web was supposed to look alike; eg: your browser would render all submit buttons the same for every site. HTML was an abstraction language for essentially native UI elements on the computing system.
But as the web grew towards an advertising model and away from a scientific purpose, it became important to be able to style things _exactly_ the way the marketing department wanted. So along comes CSS and years of other changes that allow you to customize literally everything.
So then we'll swing back hard the other way: not everyone needs a virtual machine and SVG graphics. If Grandma's catering on the web just needs a simple submit form that POSTs orders to her email account via postfix, we shouldn't need more than a few basic common elements. So yeah, we probably need some ways to markup text on a page... and we're back to where we started.
Really we probably need both approaches available, but we're stuck with JavaScript being the worst of so many worlds but is the unfortunate official language over the internet, and ugly HTML elements that need a facelift.
Everything above is an opinion. Fire away.