(Note: Ayende corrected corrected me on this one. Using active record you can get rid of the mapping file and "decorate" your class with attributes that NHibernate will read instead. I should have mentioned that, I did know about it, we just are not using it yet in our current project.)
Add to that title: 3-tiered architecture, Test-Driven-Development (TDD), Mocking, and the Carpel Tunnel Pattern (Model-View-Presenter/Model-View-Controller).
The answer: because it it a lot of work. A "scary" it's a lot of work. A "I can't believe you are doing this" lot of work. And if you are a one man shop: quadruple that. This is probably the same reaction that the Oregon Trail settlers had when they saw the Rockies. Big tall mountains, standing right in between them and where they wanted to be. So big that there was no way to see the other side. The difference is, the Oregon Trail settlers KNEW there was another side. A promised land, as it were. Of course, if they new better they would have headed for California instead of Oregon -- but that is another story. The same is true for all of these technologies. They are a lot of work to implement -- at first. But once done life gets a lot easier.
Compare that with all of those spiffy RAD (rapid application design for those of you who have not seen the term in a long time) demos that EVERYONE is giving. Microsoft, Borland, et al, they are all to blame. The demos that usually start with "Now watch as I make a complete databound application in 10 minutes complete with every wiz-bang feature that you don't implement in your app and customers don't care about." They are quick, seam easy, and relatively painless. But they dont show that as your application grows in complexity, things often get much worse for the RAD tools. Your code quickly turns into a disorganized mess. All of your code is in a couple of files (often one) and finding anything is a herculean task.
If time is money, you still get what you pay for.
I will use NHibernate as an example. Right now, in the world of ORM tools, NHibernate is a 400 lb strong man with a weird accent that makes him hard to understand. You know he is powerful, but the language barrier makes him hard to deal with at first (both my grandfathers were like that). But once you muscle through that initial frustration it is amazing the things you can get done.
The language barrier in NHibernate's case is its strange API, the HQL language, and the metric ton of classes and configuration files you have to create. In the system we are using, there are 2 or 3 files created for every table in the database. One data class, one XML configuration file that maps to the data class, and another class that has all of the strange HQL queries. (Note: this list of classes can be reduced by one with Active Record, and you can use one class for all of your HQL queries). Then there is a class for working the data and giving to the presentation layer, then the presentation layer class to display the data. No wonder there are no good samples on this stuff (and I call it the carpel tunnel patter for a reason). Plus, I haven't even gotten to the test classes yet!
That is a lot of work to implement. Even when you know what you are doing that is a lot of work. But as with many things, the time is made up later. Notice there is no confusion about where the database queries go. There is no confusion about what classes hold the data. And there is no second guessing about putting the queries in the data classes. Because of how HNibernate works, it actually forces you into better practices. Now, once you (and hopefully the rest of you team) is really up to speed, thing can really crank out, and with minimal confusion. That is one of the signs of a good architecture, clear understanding of where things go.
Summer pays for Winter. The basic idea is to pay up front to reap rewards later. Yes it is a lot of work to implement an architecture around NHibernate, even if you are using a code generator, but there are rewards that make it worth it, if you follow through.