PrestaMan, Спасибо большое за подсказку. Разобрался.
Если кому нужно, то, вот готовый код как разбить ссылки на несколько списков модуля Block CMS.
{if $block == 1}
{foreach from=$cms_titles key=cms_key item=cms_title}
{if $cms_key == 7} {* Меню с ID 7*}
<div class="footer_menu">
<h4>{if !empty($cms_title.name)}{$cms_title.name}{else}{$cms_title.category_name}{/if}</h4>
{*$cms_titles|@debug_print_var*}
<ul class="footer_navigation">
{foreach from=$cms_title.cms item=cms_page name=links}
{if isset($cms_page.link)}
{if $smarty.foreach.links.index % 3 == 0}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>
<ul class="footer_navigation2">
{foreach from=$cms_title.cms item=cms_page name=links2}
{if isset($cms_page.link)}
{if $smarty.foreach.links2.index % 3 == 1}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>
<ul class="footer_navigation3">
{foreach from=$cms_title.cms item=cms_page name=links2}
{if isset($cms_page.link)}
{if $smarty.foreach.links2.index % 3 == 2}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>
</div>
{/if}
{/foreach}
{/if}
В общем, получилось, но не совсем так, как я ожидал, пришлось вручную создать отдельно 2 списка <ul> и для него продублировать цикл, но тем не менее все работает. Если это уж полный говнокод, то буду рад просмотреть на предложенный вами более корректный упрощенный вариант.