As explained above by @Miguel Ping, Application servers contain features developers don't need.
For example, many developers do not need code for messaging , so they don't need JMS jars.
Other developers may not need clustering, so they don't need clustering code, and so on.
As today most UI is oriented towards web, Servlet container, which must be provided by application servers , becomes more and more a crucial component, hence many developers decide to use ONLY a Servlet container (i.e - tomcat).
In this case, many developers use Spring framework to provide replacement for functionality they have with plain Java EE (or to integrate with Java EE - Spring can be run on top of application server as well).
Spring-core is lightware and provides mostly a Depdency Injection/Inversion-Of-Control container (replacing the EJB container at Java EE).
You may add other modules from Spring framework to give more features to your application., whereas in many application servers (those of EJB 3.0 and below) the application server is loading the entire stack and this also affects staring time of Application Server (and this is quite annoying for developers, from personal experience).
Having said that, EJB 3.1 contains now profiles, for example - the web profile, which loads a smaller number of parts from the Java EE spec. In addition, Jboss introduced in JBoss AS 7 a parallel deployment mechanism which analyzes dependencies within application , and performs parallel deployment of independent components.
For example, at oVirt open source project, we reduced start time from more than 1 minute on a simple deployment of a virutalization environment to something like 3 seconds.
I have no idea if such mechanism exist in other EJB 3.1 application servers, however, as mentioned before, you can define profiles quite easily or use already existing profiles, such as web profile (EJB lite) in order to reduce start time
To conclude,
In past - people used tomcat mainly to reduce start time and to reduce amount of modules being loaded.
Spring presented a modular alternative to Java EE development and can be used with tomcat.
.
Today, with EJB 3.1, Java EE has also adpoted modularization, and there are application servers such as JBoss AS 7 which reduce start time to a few seconds due to all kinds of optimization made during the deployment.