На вход они его получают, чтобы подписаться при инициализации и отключить наблюдение, когда оно уже не нужно (при закрытии соединения).
Даже если регистрировать слушателей не из конструктора, механизм отписки все равно придется вызывать из подписчика, т.к. только он знает когда это произойдет.

Единственное, что подписчики знают о рассыльщике - это события за которыми тот следит. Можно сделать вместо EventHandler#handle_events отдельные методы на каждое событие
```ruby
#handle_read
#handle_error
#handle_hup
...
```