I've finally accepted that I can't do a unified theory of syntax and code, where syntax is just code applied to the remainder of the program. There's just no nice way of distinguishing a macro from a function, or figuring out what exactly a macro applies to. At least not with how much/little I've fleshed the thing out.
So I'm going to kick-ass-ify the interpreter and make it super flexible, so you can metaprogram how you want.