There are enough binding libraries by now where you don't need to write a single line of JS (e.g.
https://rustwasm.github.io/wasm-bindgen/examples/dom.html).
For better or worse, browser APIs have been designed to be used with Javascript so some FFI magic needs to happen when called from other languages, with or without WASM.
And if each web API would automatically come with a C API specification (like WebGPU kinda does for instance), Rust people would complain anyway that they need to talk to an 'archaic' C API instead of a 'modern' Rust API etc etc...