Depending on how you look at this issue, there either are, or aren't, a lot of applications written in mulitple languages.
For example, consider a mash-up web app that uses several web services. Each web service can be written in a different language. So in a sense, such an application is written in many languages.
Alternatively, you can look at a "simple," non-mash-up, web app that might use:
- SQL for persistence,
- C#/Groovy/RoR/etc. for application logic,
- and JavaScript/CSS/(X)HTML for presentation.
There might even be an OR/M tool, or LINQ to SQL in the case of C#, for accessing the data store. Let's not forget a healthy sprinkling of regular expressions embedded at various levels of the code. These are all different languages. So in this sense, multiple languages are regularly used to build apps.
But I don't think that's what you have in mind. I think your intended scope is the "main body" of code produced by a single project team. You're wondering why a project doesn't write, say, one component in Java, another in Lisp, and a third in Erlang, and then link them all together as some unified deliverable.
Some answers have been proposed like the build/deploy is harder, or not everybody will be able to work in every part of the system, because of some lack of skill in particular languages. I'm not sold on those types of answers. I've seen nasty build/deploy scripts in projects written mainly in a single language. And in my experience, when almost any project gets to a certain size, especially if it was written by many minds, it becomes difficult for everybody to be well versed in every part of the system. Also, jumping from one language to another (given a sufficiently seasoned developer) really isn't as big of a hurdle as some make it out to be.
The problem is that we can't just plug together pieces of code like lego blocks. We'd like to, and in some cases, maybe we can sort-of, kind-of do that. The issue is mainly about the maturity of the specifications for the public component interfaces and the component dependencies. Again, I've seen this stuff get in the way of a "mostly one language" project. But when you jump language boundaries, the situation is more complicated.
Regardless, having the "right" language for the right problem is very valuable. If you really believe that you have three components that are best expressed in, say, Java, Lisp, and Erlang, then it is to your advantage to write those components in those languages. As long as you expect that the work required to link them together and maintain those links isn't greater than the value you get from writing in multiple languages.
So then it really comes down to reducing the costs of assembling the components. This is a slightly different notion than just saying "the build gets harder." With well defined public interfaces, proper information hiding, and relatively painless dependency discovery and resolution there's no reason why components of a single project can't be written in multiple languages.