What changes need to be made to a language/runtime if one wants to implement fully asynchronous exceptions (thrown from one thread to another, capable of interrupting pure computation without the need for polling)? What issues and challenges need to be addressed and how? What would be the difference in implementation between compiled, JIT-ed and interpreted languages?
Well, that's basically what interrupts are at the OS/interprocess level.
For a multithreaded environment, your main challenge will be making it work with mutex mechanisms used to prevent race conditions in shared memory.
My intuition is that this will prove to be impossible.
It could work with environments that don't have shared memory between threads, like Erlang.