But at the same time, it provides a vector for foreign, non-free software to run on my computer. Every time someone sends me a Google doc blocking printing/copying (on _my_ computer!), it makes me want to join a monastery.
Isn't it basically the opposite? The hard parts of the browser are layout, styling, and multimedia stuff that goes into rendering markup compliantly. Then there's the infinite sink of optimization work for a JS engine, the high-level scripting language for that markup. The low level access that something like this emulator use is comparatively easy; a WASM runtime and Canvas blitting pixels from some shared buffer.
Or am I mistaken that a WASM engine is much easier to build than a performant JS engine?
Absolutely. It's very limited, and designed for purpose, rather than somewhat by mistake (like JS): https://github.com/sunfishcode/wasm-reference-manual/blob/ma...