Sometime you have a very powerful server but it fails to meet your performance requirements. You want it to work 4 times quicker... An option could be increase CPU speed 4 time, HDD speed 4 times, etc... 4 time.. That could costs 4*4=16 times more expensive. An option could be buy additional 4 server (to have totally 5, they would increase overall performance in 4.1-4.6 times). And also, higher availability - is a good benefit.
I wouldn't say it is a very common practice. it is not really too often you need that. Usually "it is a little bit expensive toy" :). And for SQL side I would suggest to use SQL Cluster and not an Load Balancing.
There are I would say a lot of thing you need to keep on mind when implementing load balancing. Starting from session storage, single cache storage,... you will go into more complicated business process: check if "user" don't update information changed in the same time by another user, etc...
Similarly to any kind of data you need to have a unique source of data. For sessions you need to have a "session provider" that for each server in your "farm" will decode "session id" and provide system with a session data. As Mitchel already said ASP.NET provides out-of-the-box solution for that.
References, I would start reading from something talking about writing scalable applications.
Few general references:
http://loadbalancing.servers.co.uk/benefits
http://en.wikipedia.org/wiki/Load_balancing_(computing)
http://refcardz.dzone.com/refcardz/scalability
From (.NET) developer perspective a good reading would be:
"Improving .NET Application Performance and Scalability", Microsoft, Pattern&Practice.