OK, thanks for the explanation.
I see one drawback in the way you implemented it: you're looking at all the types in the TypeOracle, and putting them in a map; that means the compiler cannot prune unused listeners, as all listeners *are* potentially used (they're referenced in the map). This is the same kind of drawback as GWT-RPC, where referencing List<?> will compile in all List subclasses even if you only ever transfer ArrayList<?>s (and e.g. never transfer Collections$EmptyList, Collections$SingletonList, Collections$UnmodifiableList or Arrays$ArrayList).
Overcoming this implies referencing all the listeners you *want* to use, either in an annotation (similar to @WithTokenizers on PlaceHistoryMapper, or RequestFactory's @ExtraTypes) or in an interface (similar to GIN's Ginjector, or RequestFactory) and let the user do the GWT.create(). It only changes slightly the event bus setup (GWT.create() on a custom class/interface instead of "new EventBus()", or something similar).