It's not tho.
It's really not. Most of the software you use every day was developed by very average software developers. The vast majority of the work software developers do isn't terribly novel or particularly difficult. And you know what? They do just fine. Things work well. Systems stay on line. Companies make money.
I've seen too many "bad" teams produce perfectly functional software over the years to think that this gap exists anywhere but in Joel Spolsky essays.
I think comparing carpenters to software engineers does a disservice to carpenters. Software developers to me are more like dry-wallers. A really good one can do it faster, but the end result mostly always looks the same.
The difference between an average and a great carpenter, however, is immediately obvious. There is real craftsmanship there, and you can clearly see the difference.
It isn't until you get to the edges of software development that those same differences become clear. When you're dealing with very high scale, very aggressive performance metrics, or very difficult mathematical concepts you see the difference between average and great developers. But those are less than a fraction of 1% of software projects I'd wager.
* I should note: I'm a software developer.