Right now, the macros are very naive -- they are passed the entire unevaluated AST on which the macro is invoked and the new AST they return is used instead. I think this makes them FEXPRs. They do capture the defining lexical environment.
Thanks for the link, looks very helpful.