One example would be a simple Python/Django install. We have Apache running on the server. As part of our Apache configuration, we're running mod_wsgi. The mod_wsgi module allows Apache to fire up a number of Python interpreters that have long-running jobs in them. When a request comes in, Apache sees that it should go to Python & hands the request over to mod_wsgi and mod_wsgi passes the request into your already loaded & running Django application.
Another example would be a Ruby on Rails application running behind Nginx and Mongrel. Mongrel is a web server that lets Ruby applications live inside of it. It's really good at serving dynamic pages but it's a little slow at static stuff, so we set up Nginx for that. Nginx serves the static content (like Apache did in the last example) but whenever a request for one of the dynamic pages comes in, Nginx just acts as a proxy and forwards the request to Mongrel.
There's a minor difference between the two cases but it's not really worth delving into unless you're handling server architecture for a high-volume website.
A third setup comes in with Node.js. With Node, the web server is your application.