Екшены есть везде. Только именуются по разному.
Емиттер передаётся в раннер, а раннер нужно запускать после роутера. Т.е. в такой схеме емиттер никак не мешает. Всё что вам нужно, это запустить роутер и получить от него строку с классом, который имплементит ServerRequestHandler. Потом через контейнер получаете объект этого класса и передаёте его первым аргументмо в раннер и он успешно запустит этот класс с методом handle.
Я не адепт MVC конечно, но как быть с контроллерами, те делать логику определения экшена в контроллере какой-то зашквар.
Отсюда мысль сделать специальный Handler который бы прнимал принимал разные контроллеры и экшены как callable, closure, те универсальный хенндлер резолвер, а еще лучше сделать такой хендлер в роутере благо у меня свой роутинг на psr.