Well, one obvious reason is that of programmer incompetence. I came across a more interesting theory while reading Fred Brooks' classic book, The Mythical Man Month this morning.
Your users get sophisticated and find new bugs.
This is how it works. As software is built and delivered to the users, new bugs are found and solved in future releases. All goes well for a few months. Then, as we keep releasing new versions of the software, old bugs found and solved in previous releases tend to reappear. The common reason for this is that as the users get more familiar with the software, they try to use the new, advanced capabilities offered by the software. This in turn finds new bugs that the developers and the QA overlooked in the initial phase of the development process.
As you keep on releasing new versions of the software, the complexity increases exponentially. The bug fixes, often done by new programmers other than the programmer who wrote the original code tend to destroy the structure of the system and add disorder. As time goes on, less and less effort is spent on fixing the bugs in the original design and more on fixing bugs added by earlier bug-fixes.
Then we call it legacy software, and hope that re-writing the software with a new technology will solve all the problems. But it won't, it will just delay them until the cycle repeats.
Finally, we have bugs because of fear. Because this information can be threatening, we all develop kind of information immunity. It protects us from all the information that we don't want to hear. No matter how well testing we do, if the people who are dealing with these test reports have developed this immunity, it's all waste.
This is how fear-driven development sounds like:
Developer: "That stupid bug shows people I'm not as good a programmer as I'd hoped to be."
QA: "The developer will get angry if I report this bug, because it makes him look bad"
Project Manager: "With all these bugs, I won't make my schedule."
Sales: "This product is so full of bugs, it isn't going to sell very well, and I won't make my numbers."
User: "It can't be a bug in the software. Definitely I am doing something stupid. I must find a workaround."