This question clearly demonstrates that the OP has no understanding of the software development process. I've been doing software development for the last 15 years, mostly as a consultant, and have been on A LOT of projects at many different clients. I have yet to see one with "excellent product specs" completed up front. Why? Because customers never know what they want until they see it. And even when they think they have defined something well, they don't understand what they will actually get back.
Software is very abstract and unless you are a developer or a technical person (which most customers/users aren't), then it's very difficult to conceptualize how it will work once implemented. Then there's the reality of changing customer requirements and priorities. I'd like to know how the OP is writing perfect specs when such a thing doesn't exist in the real world. And there are many other aspects to development which the OP doesn't seem to understand either. Who is doing the business and technical analysis of these requirements? What's the process when requirements change? Where is QA and user acceptance testing in all of this?
I suspect nobody is doing these things. What's really happening is that he writes something up based on vague requirements (which are likely to change), throws it over the wall to a developer, and expects a polished product to be thrown back over. Meanwhile the customer didn't understand what they were asking for in the first place, changed their requirements, increased scope, got something back that was maybe close to the written spec but actually wasn't what they wanted in their mind, with no analysis or design having been done, that wasn't ever tested by anyone other the developer who wrote it. And all of those scenarios are called "bugs" by the OP. This is a dysfunctional process that is unfortunately all too common. No wonder your developers balk at fixing this stuff for free.
I don't doubt that there are bugs in the code, especially if the OP is trying to do this on the cheap. There is no substitute for experienced programmers, and there's a reason that people who are experienced cost more. So the first problem is that the OP thinks he can get something for nothing or next to it. But the main problem here is the OP's lack of understanding about the software development process.
If you want to improve things and not have your customers complaining all the time, then start with yourself - read up on software development methodology, ditch the waterfall/throw over the wall approach, and pay up for developers who know what they are doing. I'd suggest a more agile method where customers are very involved in the process, are able to get their hands on the product as it's being developed and provide continuous feedback. Otherwise, look in the mirror and expect more of the same. Developers don't need your empathy, they need a competent project manager.