Agree. The best way I can describe it, is that it's a design pattern for a lightweight runtime.
You can use monads to implement exception handling, global state (without actually having global state), and async/await.
It's difficult to explain how all those features can be implemented through one generic interface. But it's easy to see how each of those things would require a "lightweight" runtime.