after reading many tutorials about WASM I still figured out one of the most important questions for me:

Would I be able to call JS functions from WASM? or pass callbacks to WASM. Because WASM sounds like it goes agains the async nature of JS and I have the feeling that is going to be very annoying to merge both worlds.

Also if I cannot call any JS func from WASM it means I cannot call WebGL or Audio so I dont know what would I need the performance if I cannot access the most performance demanding APIs.

Yes, JS and wasm can call each other. In the long run wasm should also be able to call web APIs directly.

Is wasm also restricted to running on one thread like js?

No, though neither is Javascript. (I am not sure how far along non-WebWorker-based wasm threads are, but here's the proposal: https://github.com/WebAssembly/threads)