automatic columns are extremely problematic in HTML. There are additions to CSS which make this possible, but they’re not supported by most browsers yet.
the basic issue is that the page would need to render first, then bounce the colums into place – because you have no way of predicting how many entries will be thrown out by your list functions until the data is actually in the page already.
Of course this will be solved in future, but what do you do now?
well, you can break up your functions to display link categories not as one group, but as several, if you are happy to go back and re-order those manually once the balance shifts as you add more links…
ultimately though, to address your question of whether this should really be this hard…. the answer is yes, unfortunately.