Ну про фичи это Вы уже про конкретную вашу реализацию говорите. Но на концепнутальном уровне MVI потоки комбинируются и превращаются в сайд эффекты в методе bind() и оттуда же идут сообщения в редьюсер, которые меняют стейт.
В самом MVI вообще только Model,View и Intent. И их круговорт. Сайд эффекты каждый делает по своему. Это всё заимствовано из Redux. Обычно есть некий Store, в который на вход идут интенты а на выход состояния. Это всё чисто. Сайд-эффекты можно делать через Middleware, а можно просто выдавать события из Store и обрабатывать чем угодно (отдельными хендлерами), и опять отправлять интенты на вход. Если говорить про MVICore, то можно редуктор из TEA разбить на три части - Actor, Reducer и NewsPublisher. И все они будут чистыми но у каждого будет своя микро ответственность. А в чае всё в кучу навалено.