I tried LDD at first, but frankly, the order in which it adds the parts is often quite nonsensical:

I also tried a bunch of other tools, some of which are mentioned elsewhere on this page, with mixed results.
So what I ended up using, with great success, is LIC (LEGO Instruction Creator). It's beta, somewhat buggy, and for all I can see it was written by just one AFOL in his spare time, and the development has stopped. But it's very easy to use, quite versatile, and I am more than happy with the results. Here's what it looks like:

(Scroll down for sample images of the final instructions for two models.)
Basically, it's a WYSIWYG editor that takes an LDraw model as input. And a surprisingly powerful one at that. Some of the things you can do with it are:
- switch between vertical and horizontal layout;
- add, delete, or merge steps;
- move individual parts between the steps;
- move everything around the page freely;
- rotate individual parts or the entire model, automatically adding rotation icons if you wish;
- "displace parts with arrows" (just like in TLG's instructions, where the part has not been connected to the model yet, but an arrow shows where it's supposed to go and which way around) — this can be done in any direction, up or down, left and right, top and bottom, and for several parts, too;
- make a template for your instructions (things like fonts, font sizes, background color, and so on and so forth), so instructions for different models have the same, your very personal, look and feel;
- add text labels such as part counts, your name, really anything.
LIC will also automatically create a parts list as the last page of the instructions. Allegedly it can also export to PDF, and integrates with POV-Ray for higher-quality images, but sadly neither of these options works for me (as I said, there are some bugs). Might work on a different machine, though, or a more recent OS. I don't know.
So anyway, my complete toolchain looks as follows:
- MLCAD/LDraw for modelling. It has a steep learning curve, but once you have figured it out, it's a breeze.
- Then I feed the LDraw model into LIC, which generates a draft of the instructions and allows me to fine-tune them interactively.
- Then I save the instructions as images and do some final retouching in GIMP - moving stuff around a couple pixels, adding photos, stitching pages together, etc.
The final result can be seen on my Brickshelf. Here are just two sample pages:


All tools I mentioned are free and available for download. Follow the links.