Schemeの標準関数だと入力と出力で関数が違うから、一発では書きにくいな。

(define-syntax with-open-file
(syntax-rules
((with-open-file (var filename . options) . body)
(call-with-open-file (lambda (var) . body) . options))))

としておいて、手続きcall-with-open-fileの中でdirectionオプションを
処理をするのが順当かな。

Schemeのsyntax-rulesで出来ないのは、マクロの呼び出し側で陽に与えていない
変数を捕捉するようなマクロね。On Lispのaifとか。
with-open-fileの場合は変数名sが与えられるので問題ない。