The Open Source movement has muddied the line between production-quality code and beta code. It's not intended for wide distribution or casual use. Maintenance is not a chance for a do-over. I tend to think that backward-compatibility is important, so old APIs should be deprecated but not removed. Know when to kill it.
Some projects are just disasters, and everyone realizes it, but no one wants to pull the plug.
Thousands of hours have been spent. SO's to work on it. Anticipation in the community is high. Many projects spiral out of control. So often, the programmers continue flailing away, hoping against hope that honest effort and will can overcome bad design.