I really don't think macros are much different than any other API. The only difference is that it's an API that affects the language itself, and thus the stakes are higher. If you design the API well, then it makes code
so much easier to read than if you didn't use a macro. If you design the API poorly, then it makes it much more difficult to read than if you didn't use a macro.
Thus, I think a lot of it boils down to risk aversion.