一般的に言われる末尾の最適化ってのは
呼び出しにコストが掛からない、「何も保存したりしない」のが前提だよ。

スタックの代わりにヒープや環境が延びたりするなら
それは末尾の最適化には当てはまらない。
保存場所が変わっただけ。