What I don't understand is why IPv6 only has a single loopback address, instead of a /8 or /16. This would enable cool things like the OS mapping each subdomain of localhost to a distinct IPv6 address.
That's the same as any system right now. If I bind to 127.0.0.1 I don't automatically get traffic for or listen on 127.0.0.2
... you haven't worked on Linux or Windows networking stacks. On Linux, typing http://[::ffff:7f00:1]/ when you have a bound server on 127.0.0.1 will automatically connect to 127.0.0.1. Conversely, it's a illegal operation in Windows: you cannot legally bind even with SYSTEM privileges.