You don't know what first-class means? And you call yourself a Lisper ;)
The word first-class is quite loaded. I merely wanted to see what your definition for it was. Macros are very different beasts from functions, so I don't expect them to do the same things, but if I want to treat a macro as a function I can do that. * can be stored in variables and data structures
I can store its form in a variable or data structure, I can store the expansion in that. I can generate a piece of code holding the macro, or the macro can generate a piece of code (compiled or otherwise), which can be held as data. Macros are themselves compile-time constructs, which means they have their own set of rules to be worked with, and simply don't make sense outside those domains. * can be returned as the result of a subroutine
The form, the expansion, or the compiled expansion? Either can be returned. The macro function? Sure. * can be constructed at runtime
Yes, you can call COMPILE at runtime to compile a piece of code, or MACROEXPAND on a form at runtime to expand it, or even the effective macro function represented by some name. New macros can also be defined at runtime, if you wish to do that, and many more. * has intrinsic identity (independent of any given name)
You'll have to define what you mean by this. A macro function, its expansion, a compiled piece of code, gensyms, symbols, ..., as well as any other Lisp object are internally represented by pointers (altough, in some weird implementations they could be something else), and you can compare their identity with the EQ function (you can also store them in a hashtable if you wish, which is keyed by EQ).
There are a few places where Scheme's hygenic macros can do certain things consistently (maintain lexical scope upon expanding), which low-level macros would have to work around manually to achieve hygiene, but all these situations can be solved.