Вы можете определить метод addEventListener для сбора всех объектов слушателя, и ваш код может вызывать их в любое время. Это просто ОО программирование. Определите addXListener, добавьте объект, переданный в качестве параметра, и когда что-то случится, вы вызываете его методы.
Да.
Но помните, что события пользовательского интерфейса - это события, определенные в HTML / Javascript, так что вы будете программировать только для того, чтобы ваш объект "obj" предупреждал о ваших событиях.
К примеру:
FunnyProcessor
+ addStartListener(...)
+ addProcessingListener(...)
+ addEndListener(...)
+ doStuff()
и doSuff будет сначала вызывать слушателей начала, затем делать некоторый цикл и для слушателей обработки вызовов каждой итерации, а также в конце слушателей конца вызова.