You can increase the worker thread pool in the ASP.NET configuration and I have found it to help quite a bit on multi core boxes and IIS 6. From the very little I have done with IIS 7 it seems to manage threads much better without needing to tweak.
The more direct question of why to use both ... you can Async a unit of work so that you free a thread from the pool for another unit of work to begin without waiting for the other thread to complete. Which allows the app to parralize more work at one time.
All your aspx requests are being executed in a Worker Thread anyways, but if you async chunks of your request it can execute parts of it and return the thread back to the pool rather than executing everything in your request all at once.
It is tricky and difficult to master so be careful. :)
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading
Outside of ASP, with windows forms there is no such thing as "limitless" thread pools. When you spin up more threads than the box/os can handle you'll start context switching so often that you will be defeating the purpose of threading. I would read further on the subject since it is a very large and advanced topic.
http://en.wikipedia.org/wiki/Thread_(computer_science)