There is no silver bullet, and claims of 20x etc are worth a grain of salt.
However a big part of it is the perceptions mentioned in the other answers in this thread. They vary from the simple ("can't be true") to the generic ("hard to customize") to the general ("generates messy code"). In order to really compare you need to compare a specific 3GL environment with a specific 4GL environment. Both will have strengths, and weaknesses. Both will likely allow you to create good or bad programs.
The biggest boundary is the skill factor. To get the best from any tool takes time and effort. Not surprisingly users of 4GL's are often the biggest proponents of it, so clearly something about them works for a lot of people. But they usually cost more (to buy), have their own idiosyncrasies and their own strengths and weaknesses. Getting programmers to convert from one environment to another is hard.
In large organizations there's also a lot of existing code to cater for. If you have teams of developers it's hard to make a case for changing a whole team of programmers from one tool to another. Even if you did that, with no existing experienced user in the team, the learning process will be slow and hard. Again this is true regardless of language or environment.
Economics also plays a big part. Companies like the security of being in the main-stream. Even if it costs more. They like the idea that squadrons of programmers are available to write code in the "current" language. Programmers are a commodity that are expected to come and go, and can be replaced when needed. The world is full of C, Java, C# programmers etc. Choosing a "small" language though results in endless political problems, decisions have to be justified and so on. It's the old "no one got fired for buying IBM" syndrome. At the end of the day if money is no object, then there are other considerations that (politically) matter more.
It's no surprise then that most users