Do you mind explaining why it is a mess? I'm not doubting what you are saying is true, it is just that recently I used a Clojure library to connect to Facebook, Google, and github, and the code to do so is simple and more or less the same for each site, with one of the sites being slightly different.
Is the mess on the side of a library writer's perspective? Or in running it on the server?