When you say "real functional aliases" what do you mean - do you mean foon:m? If so, then that doesn't really work on, say, FreeBSD, where the correct way IS to bind addresses using ifconfig and the "alias" modifier - it doesn't have a concept of foon:m - there's a foon interface with a list of inet addresses bound and a list of inet6 addresses and their corresponding forwarder entries. Linux's 2 methods are both equally supported by the kernel, but less so by the operating system. It doesn't make one more or less right than the other, and actually, though it pains me to admit it, using iproute programmatically is significantly neater than searching to find a free binding on a host with many interface aliases.
As I say, if you want to have, for example, a v6-link-local scoped address - you probably want to bind by scope (which is almost the same as binding by NIC but not quite).
In v6 I suspect that this kind of problem will get worse, as it's reasonable to have link-local or site-local addresses bound along with real routeable addresses to interfaces. Even when dealing with v4 hadoop seems to generally choose the v4-in-v6 space (::ffff:xxx.xxx.xxx.xxx) for its bindings (so AF_INET6 rather than AF_INET) - on my linux installation, anyway.
What I'm saying, really, is that you kind of need both, but probably prefer IP addresses.