BTW, maybe when Emacs is built with support for threads, timers should
be run in a separate thread (so you could just call `thread-yield` to
do what you want).

Yes, this is what I was actually looking for.