application classes are normally not accessible to shared libs (while shared libs must be accessible to application classes). And if a bean class is not accessible the bean is not available for injection (see also 5.1.4. Inter-module injection). Extensions work differently because the spec does not define any visibility boundaries for events (see also CDI-518).
Note that there are some open spec issues regarding EARs, e.g. CDI-129, and in fact it's really hard to write a portable application packaged as an EAR.