Maybe it's late and over budget. Maybe it doesn't meet the customer's needs. Maybe it's been canceled, but is being propped up for political reasons. Or maybe it just doesn't work. Whatever the reason, projects fail all the time, and no significant program is bug-free.
Software is simply hard to write.
Accidental difficulty is introduced by the tools and techniques programmers use. It can be eliminated by using better tools and techniques. But even today's high-level languages introduce a fair amount of accidental difficulty. This leads to complexity, and complexity leads to accidental difficulty. Up to now, though, domain-specific languages haven't been feasible for use in most projects because they're so narrowly focused.