опять же, что плохого в том, что уровень вложенности растёт? всегда можно разбить на функции, можно заюзать thread-*
, итп.
Разбить можно не всегда — например, если хочется переиспользовать вычисленное заранее, но не возвращать много данных выделяя памяти под контейнер (увы, values в елиспе нету).
Традиция делать setq всех связанных данных одновременно есть, и у нее есть основания. Люди достаточно много мутируют в елиспе, этим он похож на Коммон, и это никуда не денется.