Асинхронщина - суть js, на том вся его архитектура стоит. Wasm не замена js, а средство для оптимизации узких мест: подразумевается что работать оно должно аналогично вставкам оптимизированного asm кода при классическом программировании. Если же ты хочешь писать ВСЁ на asm, то, очевидно, придётся страдать на каждом шаге - это твой личный выбор
.
В целом если нет желания писать на js - можно писать на языках, компилирующихся в wasm, наверняка есть множество библиотек с прозрачными биндингами браузерного api, например wasm-bindgen для rust.