pues la verdad que te has complicado mucho. la forma sencilla es con css3 gracias al modulo multi-column layout. el problema, aun no es estandar. lo menciono para que conozcas que dentro de un futuro sera estandar. aun asi, hay navegadores que ya tienen soporte el cual puedes experimentar o si te decantas por definitivamente utilizarlo, usa tu propio juicio.
al tema en si, te estas complicando mucho la estructura de listado. lo que puedes hacer es crear el listado pero un grupo por cada cantidad de opciones. de modo que te quedaria asi.
Código:
<ul> <!-- listado principal en horizontal [nivel 1] -->
<li>categoria</li>
<li><ul><!-- nivel 2 columna 1 -->
<li>opcion</li>
...
</ul><ul><!-- nivel 2 columna 2 -->
<li>opcion</li>
...
</ul></li>
...
</ul>
luego con css flotas los grupos (elementos UL nivel 2) hacia una orientacion (left|right) para que parezcan columnas.