Perhaps the biggest problem with documentation is that it's an afterthought. We tend to want to focus on getting things done, not on meta-getting-things-done.
Inline documentation is cumbersome, difficult to format, and isn't easy to present to a user. That means that you end up documenting things at least twice. And there's a definite distinction between technical (api) documentation and business (end-user) documentation.
CopyCatJS handles the meta and let's you program. You can either document first, or document after, or document as you go. Also, CopyCat is great for understanding poorly documented APIs in the wild. Just give it a try!.