se sai quanti sono i possibili livelli di nidificazione, puoi creare N foreach (uno per ogni livello).

L'indice dell'array che conserva le categorie figlie dovrà avere un nome che tu conosci, in modo che nel foreach nidificato accederai ad esempio in questo modo:

codice:
{foreach item=figli from=$elemento.figli}
Pur essendo un fanatico di smarty, in questo caso io preferirei generare l'html direttamente da php, perchè se hai un numero di nidificazioni virtualmente infinito, il modo migliore è usare una funzione ricorsiva, che richiama se stessa reperendo i figli dell'id che passi, finchè l'id che passi non ha figli.

spero di essere riuscito a spiegarmi bene. Ciao