A good reason for this is modern websites are generally very modular, and in addition unlike compiled programs they can't be 100% guaranteed to work perfectly in all regards; if you expect them to you're going to cause a bad user experience because let's face it, you didn't test your site in every possible version of Internet Explorer, Opera, Chrome, Firefox, Safari, ect.
Technical details out of the way, why on earth would you want the whole system to fail on one error? It's not user friendly to give a blank page with just an error message, period. If you can give the user most of the content that's not broken, do it. If most of the content is broken, tell the user why and present any and all of the site not affected by the error as it should be.
Youtube handles this situation very well; on occasion the Subscription, Commenting or Uploading features are temporarily down. Most users aren't using those features at any given time, and it's easy to continue "normal" use of the site without them, and you get a nice error message saying "Calm down, your commenting feature will be back soon" which allows users to know what the problem is and that it will be fixed. How could you even consider taking down all of Youtube because a user can't leave a comment?
Odds are much of your site aren't even tied intimately programming, they're links to other pages with content. As long as that works, leave it in! If it's a web app and the whole site is non-functional, let the user know this. Twitter's Fail Whale is a good example of this; when it's over capacity, Twitter simply won't work, so they have to give you this message.
However they can still serve links like "Help About" ect. There's never an excuse to give a raw Error 500, unexpected condition error message.