Собственно, изначально вопрос рассматривался в плане преимущества в применении в "асинхронных" процессах. Например, работа с сетью. Так, применяя хуки, мы можем расширить функционал реакциями на события в сетевом потоке, однако это сопряжено с накладками, связанными с переносом контекста в реализуемый хук(имеется ввиду необходимость вытаскивания хука на всё более "высокий" уровень модулей, чтобы охватить требуемые возможности, или же, создавать каскады хуков, дл каждого перехода с одного прикладного уровня на другой). Мне кажется, что пропуская сквозное сообщение по всем уровням удастся избежать такого "протаскивания" и ещё более обособить разнородные компоненты. Однако тут возникает зависимость от очерёдности получения сообщений. В идеале, конечно, её быть не должно.

UPD. Ну и, придётся описывать кучу сообщений, чтобы полностью описать реакции системы.

UPD2. Кстати, в некоторых случаях можно применить развитие хука - нечто, напоминающее по смыслу "владельца"(не знаю, как называется, owner, context типа того). Некая компонента для себя определяет управляющую и контроллирующую структуру(пока всё так же, как и в хуке) но мы потом эту структуру развиваем до уровня обычного объекта(с методами, с полями итд). И при необходимости инкапсулируем изначальную структуру. Тогда нет нужды переносить контекст(потому что он и так на месте).