At the simplest level, composable event loops combine the cheap synchronicity of event loops with the composability of preempted threads.
In a traditional OS, asynchronous tasks are generally accomplished by multiple threads or processes. Each thread has its own stack and is preempted periodically to switch between active threads. Low-level synchronization primitives or synchronized queues are often used to communicate between running threads.
Example of a multithreaded teapot: