The developer agreed to deliver software that did X. They did not do so. Thus, they are in violation of their agreement and must make amends. Simple as that.
As to why things are often not done this way, in my experience, it is because developers desperately want the software business to be different. They don't want the traditional rules of industry to apply to them. They want to be special snowflakes, and management is letting them.