Like tabs vs. spaces and brace style, macros are yet another of those hot topics.
Some people having a problem with multi-level macros appears to be a common thing - I've heard that quite a few times.
I do not quite get it either myself. As you said, like with general code, it's just a matter of writing readable and correct stuff.
The benefit of writing multi-level macros is the same as using macros in general: avoiding to duplicate code by hand, and making some modifications much easier (when there is only ONE place where changes need to be made.)
As Siwastaja said, if you're really unsure of macros - just write a set of tests for them. It's unusual (I've never done that myself and never seen it done directly), but it's definitely doable. Just write a series of tests invoking macros and the expected output, then invoke the preprocessor separately (all C compilers I've ever used could do this), and compare. It can be fully automated.
There are well known "pitfalls" of macros due to the fact they are just text substitution. The first class of them appears when macro parameters are not all parenthesized. Just put parentheses around all parameters in macro expressions, and this issue disappears immediately. The other one, of course, is calling a macro with parameters that have side-effects, if said parameters are used more than once in a given macro definition. To mitigate this one, you can either make it a rule never to call a macro with parameters that have side-effects, or never write a macro that substitutes any of its parameters more than once. Done.