いやいやここで書かなかったら負けかなと思っている

pushWhileは削除すべき。(EOFをちゃんと検出できない)
あとSchemeの特徴としては継続によるbreak,continueの一般化というのがあるんだけど現在の実装ではできないので放棄。
ちなみにこういう、実装元の言語(この場合JS)の機能をそのまま使って実装先の言語(Scheme)を定義するようなの(つまりSchemeの関数がそのままJSの関数になってるようなの)を "meta-circular interpreter" とか言ったりしなかったっけ。継続を実装するにはこの形の定義から脱出して、Schemeの関数をJSの関数ではなく、適当なオブジェクトにしてやる必要があります(たぶん)。それで実行をCPS形式にする。そうすると継続の実装が楽にできて嬉しいのですよ。やりませんが。
あと、Schemeはdefine-macroじゃなくてdefine-syntaxというのを採用してるんだけどこれが全然シンプルじゃなくてうけるので放棄