* easy and standard way of doing the most often used things (like replacing type identifier with another)
* automatic handling of what-stuff-came-from-which-line of code, to facilitate better error reporting by that macro library
* honest to god stack trace from the macro library if it falls flat on it's face
I mean, if you've ever seen errors that C++ compilers gurgle out from heavily templated code, I don't imagine macro library being any worse off a priori. Basically, when the compiler puts out a 3 screen error message, it's almost always much faster to just eye which lines it's referring to and read the code, than trying to decipher what the error message is actually trying to say...
Trying to avoid Turing completeness ends up introducing new concept/syntax to the language every time there is a need to do something that could not be done before. It ends up bloating the base language making it hard to reason about, and remember how every nook and cranny work/interact. That's why the "simple core language + macros" -kind of approach holds appeal to me. I'd rather see a comprehensive standard library as a cure for lack of standardization (not being able to read other peoples code) than base language that just keeps getting more and more complex with time.
Then again, maybe I'm just naive, I've only worked in small teams or alone.