Can someone explain to me why WebAssembly is restricted from accessing the DOM or the Web APIs? I haven't been able to find a reason.

Because before it can access the DOM, it needs to support:

* reference types * interface types * exception handling * typed function references * garbage collection

I.e. most WASM proposals must be accepted before we can use the DOM from WASM... by the pace it's been moving forward, I guess this will take at least several years (3-4+).

https://github.com/WebAssembly/proposals