What's the objection to putting type annotations on the macro, and refusing to compile code where the arguments to the macro don't match the type?
If you want to write a macro where any call to it which typechecks creates code which itself typechecks, you have to deal with eval of sexpr which is roughly a recursive typecheck on partial information, which sounds tractable to me.