Although it may seem odd that macros return a form to produce a result and not simply the result itself, this is actually their most important feature. It allows the expansion and the evaluation of the expansion to occur at different times.
The Lisp compiler makes use of this; when it comes across a macro call
in a form it is compiling it uses the
macroexpand function to
produce the expansion of that form. This expansion is then compiled
straight into the object code. Obviously this is good for performance
(why evaluate the expansion every time it is needed when once will
Some rules do need to be observed to make this work properly:
requirefunction, the compiler will evaluate any
requireforms it sees loading any macro definitions used.
Note however, that the Librep compiler does allow macros to be used before they are defined (two passes are made through the source file).