停止しないのは作用的順序で評価を行っているから。
引数のsqrt-iterを次々と展開している。
関数の呼び出しは引数の評価が先に行われるが、
マクロの場合は先頭から展開されるため、このような形の再帰呼び出しはマクロではできない。
もっとも、new-if関数だって遅延評価で使えるようにできるが>>509が言うように、
IFステートメントがあるから遅延評価の機能を持ってると逆に考えてはいけない。