>>1Sort of. The old style lisp macros take code and expand it to new code. Then binding to variables are evaluated after expansion, within the scope of where the code expanded. syntax-rules allows you to refer to variables that were defined in the scope of where the macros was defined. Under the hood, this feature isn't hard to provide, but it is not possible to do directly using classic macros. However, you can write a macro that takes a macro definition and a way to refer to variables in the macro's scope, and generate unique names for global variables that would then refer to these.
tldr; you can do everything with define-macro, but to get that variable capture it'll be kinda hacky.
But syntax-rules is actually weaker than define-macro, since it does everything with a pattern language rather than evaluation of lisp/scheme code. But syntax-parse from r6rs has the same power.