I trawled through the RPM API C code having to do with macro expansion. I found a loop in there which uses spaces to parse out the arguments and (I think) there is no way around this loop. I don't think you can give arguments with spaces.
I did find that macro arguments are safe, though.
My .rpmmacros
file:
%hello() '%{1}'
%name Dak Tyson
With the above macros defined, This command:
rpm --eval '%{hello %{name}}'
yields:
'Dak Tyson'
So that if I really needed spaces in my macros definitions, I can define them as macros first.
I also found, incidentally, that nested parameterized macros don't work.
This command:
rpm --eval '%{hello %{hello name}}'
yields:
error: Unterminated {: {hello
2< (empty)
1< (empty)
0< '
'