Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.
Например при создании сотрудника в модуле "кадррезерв", его автоматически надо добавить в модуль "учета". Я не могу напрямую дергать метод из другого модуля т.к. заранее не известно, будет он куплен или нет.
Вместо этого я бросаю событие типа user.created, а в модуле учета в обработчике этого события заношу пользователя в нужные списки. Получается, если модуля нет, то событие просто выброситься в холостую, а если есть, то запустится обработчик.
Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.