How to asynchronously (non-blocking) schedule a function to execute after a specific delay?

I made a port of the arcade-timers extension for micro:bit.

You can learn about the extension here: