Так оно все - реакция на события, другое дело, какие паттерны и подходы для этого используются. В Твистеде пытались этот факт спрятать за протоколами, скажем. Протоколы очень сильно отрывают описание от того, как код реально будет выполняться. С протоколами работать труднее, чем с Торнадо или Асинкайо.
На Торнадо писать было уже проще, потому что код был ближе к модели своего выполнения. Мы засылали чего-то в ивентлуп и получали чего-то из него.
Асинкайо заставил поменять язык, и появились await'ы, которые просто сделали немножко более удобнее.
А вот протоколы почти не прижились. Они есть в Asyncio, но можно довольно долго писать на нем, совершенно с ними не сталкиваясь