Первый вопрос: у вас есть мутация привязок на вашем языке? Похоже, что вы не делаете, в настоящее время, но, возможно, вы планируете добавить его. Если вы это сделаете, то копирование привязок открывает новую банку с червями; требуется дополнительное косвенное обращение.
Ответ на ваш вопрос: да, вы, безусловно, можете это сделать, и большинство языковых реализаций делают. Это связано со свойством быть «безопасным для пространства», благодаря чему замыкания избегают сохранения ссылок на большие значения, которые в противном случае могли бы быть собраны.
Реализовать это довольно просто: вы, вероятно, захотите аннотировать каждое выражение его свободными переменными, выполняя один статический проход по программе. В Racket я, вероятно, построил бы хеш-таблицу, которая связывает выражения со списком их свободных переменных.
Что бы это ни стоило, я могу представить себе семь способов, которыми вы могли бы случайно сделать свой язык немного медленнее, выполнив это:).