идея как раз была чтобы модули имели свои реализации ListenerProviderInterface для подписывания на события и регистрировали бы их в общем композитном
Нет, они не должны их регистрировать в общем. У меня композитный только CompositeEventDispatcher и то он внутри модуля и есть локальным, а провайдер локальный. Внутренние события модуля не должны быть доступны вышестоящему модулю/приложению, а он должен слушать события вышестоящего модуля/приложения. Если нужно шарить какие-то события, то они регистрируются в провайдере вышестоящего модуля.