then symlinks get resolved, and the directories do all show up together. But there's no indication anymore that they are symlinks anymore. I'd like them to be still displayed as symlinks, but get grouped first too.

Thanks! That does work, but ls-lisp seems to lack a "-v" flag to sort numbers naturally (ie 1 2 10 instead of 1 10 2). I guess I could hack that in, but ls-lisp is also noticeably slower, so it'd be easier to use a modified ls instead. (It does bother me in ls too, after all, so that might just be the better choice.)
– stefMay 17 '16 at 2:35

Yes, ls-lisp is coded in Lisp, so it can be slower. Yes, it does not support all of the switches of all versions of ls. Remember too that you can define your own commands that call other commands, and some of those can explicitly make use of ls-lisp. IOW, you can mix and match. You need load ls-lisp only once (in any of those commands: (require 'ls-lisp). Then bind variable ls-lisp-use-insert-directory-program as needed, to get the ls behavior you want: from ls or from ls-lisp.
– DrewMay 17 '16 at 4:13

I gave the ls patch a try and posted that as an answer as well. Your answer is probably the better one in general because it's portable, more straightforward and directly answers the question. I would've probably just used ls-lisp as a "good enough" solution if it supported -v as well.
– stefMay 17 '16 at 11:37

The ls-lisp solution is portable and straightforward, but unfortunately lacks some important (to me) flags and is considerably slower.

So instead, one can also modify ls directly. Because I wanted the same feature in ls in the terminal anyway, I wrote a patch for the ls in GNU's coreutils. That's certainly a lot less portable, but it was a much smaller and more desirable change than extending ls-lisp with the missing flags. (Still, ls-lisp can be used as a fallback as well.)

This patch for coreutils (8.25) sorts symlinked directories like directories when --group-directories-first is provided: