Binding constructs: I can introduce new binding constructs with
macros. That helps me get rid of lambdas and place things
closer together that belong together.

Evaluation reordering: I can introduce constructs that delay/postpone
the evaluation of expressions as needed. Think of loops, new conditionals,
delay/force, etc.
[Note: In Haskell or any lazy language, this one is unnecessary.]

I mostly use macros for adding time-saving new language constructs, that would otherwise require a bunch of boilerplate code.

For example, I recently found myself wanting an imperative for-loop similar to C++/Java. However, being a functional language, Clojure didn't come with one out of the box. So I just implemented it as a macro: