単純な場合で言えばこんなのかな。

(define count-number 0)

(define-macro (count-increment)
`(set! count-number (+ 1 count-number)))

(let ((count-number 100))
(count-increment))

(display count-number)

やっぱり衝突を回避する方法がないと困る。
CLでグローバル変数に耳当てする習慣があるのは、
グローバル変数に耳当てするだけじゃなくてローカル変数に耳当てしないこととセットで意味があって、
要するに衝突を避ける運用上のテクニックのひとつということになると思う。
だけどSchemeの場合は関数と変数で名前空間が同じなのでグローバルな関数全部に耳当てするわけにもいかない。

syntax-caseにしてもsyntactic-closureにしてもexplicit-renamingにしてもマクロ定義を慎重にすれば衝突しない。
マクロ定義を上手くやれば大丈夫ってのと、マクロの使用を上手くやる必要があるのとだったら前者の方がよくね?
というのがSchemeの立場だと思う。