I think part of the problem is also that it's sometimes more difficult to implement a nice and usable design. Instead, it may be easier to write code that does everything it needs to, but forces the user to jump through hoops to get what they want.
Sometimes making software more user-friendly may even cause the code to get more "ugly", because instead of a nice and elegant piece of software that only solves the core problem, you now have to deal with all the weirdnesses of how people perceive the problem as well. Taking away complexity on the user's side almost always adds complexity to the code. And if you're the developer, it's very easy to think that the tool you created is perfectly usable, because you understand everything about the mental model that went into it.