I am trying to understand why the listener methods are not allowed to throw any checked exceptions?
The obvious answer is because the interface doesn't allow this.
On the other hand if you think of it: why would you want to throw a checked exception? Could you catch it in your business logic and do something about it? Not really, don't forget that it is the web-container calling these methods because of an event in your business logic. So if you throw a checked exception what should the web-container do?
The answer is actually in SCJP. When you override a method, you can only throw a narrower exception. It means in the signature you declare that you "throws" a subclass of the overriden method, or you don't declare anything at all.