>
Try working with the Windows API in C#. Lack of default parameters means that for every API call I have to explicitly set about 30 options (29 of which I'm usually not using).Both APIs and UIs can be poorly designed. I think the point is that UIs have an additional constraint -- that of being interactive. At least filling out the poorly designed Windows API signatures only has to be done once, at design time. After that, the application does it for you and never gets tired of it.
Also, the audience for APIs is developers, who are far more tolerant of necessary complexity, especially when considering an infrastructure to build off of. I mean, intuitive APIs are nice, but I appreciate a proper design (respects orthogonality, minimize leaky abstractions, etc.) even if intuition is sacrificed.
Users have neither the luxury of automation (i.e. no application layer on their side that can "pave over" any warts or tedium) nor the tolerance for violated intuition.