I've been a JS (which is the land of callbacks) programmer for only a few months now, and I would disagree. Yes you can write deeply nested callback chains, but you don't have to most of the time. There are a couple of ways to avoid it.
* The async library mentioned by other posters helps a lot.
* Libraries like backbone make writing event-driven software easier.
But to sum it up: it's like anywhere else, bad programmers write "callback hell" code, and good programmers don't.