Ответ на ваши вопросы заслуживает если не отдельной книги, то большой статьи.
Следует прочесть всякие статьи и обсуждения из разряда EJB vs Spring.
Основное функциональное отличие в том, что EJB позволяет выполнять удалённые вызовы по сети. Т.е. позволяет строить распределённые системы. Для этого предусмотрено несколько типов таких EJB-бинов. Для нормальной работы EJB нужен EJB-контейнер. Tomcat не содержит в себе такого. Для этого надо как минимум Glassfish. Часто используют для этой цели и JBoss.
Hibernate - это JPA-технология, которая никак не противоречит с EJB (и тем более с JBoss), так что это вообще "не в тему".