There is probably no big difference. I'm just unable to figure out how
this works with psyntax. :-)
For example:
% csi
#;1> ,x (define-macro (foo) 123)
(##core#elaborationtimeonly
(##sys#register-macro 'foo (lambda () 123)))
% csi -syntax
#;1> ,x (define-macro (foo) 123) ; goes via define-syntax, of course
(##sys#void)
In the latter case it all happens during macro-expansion, the environment
gets augmented with a new macro-definition. In the former case the
macro-defining form expands into code that can be stuffed into a file
and compiled.