Is there any mention from the specifications that it cannot be declared final?
It's mentioned in the spec:
EJB3 Spec, Section 4.6.2 wrote:The class must be deﬁned as public, must not be final, and must not be abstract. The class must be a top level class.
but why not final?
It's a way to allow EJB container implementations to subclass the bean class if required.