However, what if I wanted to have router advertisement in each subnet? Having a single daemon on the /48 gateway wouldn't really work (how to differentiate between subnets?), so I imagine that each subnet should have its own. What is the correct way of do
You can tell the RA daemon to advertise on certain interfaces. So, if you wanted 2001:db8:1:1::/64 on eth0 and 2001:db8:1:2::/64 on eth1, you could do that. Your gateway needs to have an interface on every subnet you want to advertise on, but aside from that, it's pretty easy to set up.
Also, let's say I have several physical locations, each with its own internet connection (ie. no direct local link between them), and I want each of them to use a different /64 subnet belonging to my greater /48. Creating two different tunnels would result in two different /64s, and now that I think of it, even native IPv6 will cause the locations to be on entirely different /64. So, is such a thing even possible without resorting to setting up a VPN?
You're right; you need to create some sort of tunnel between the two locations so they could talk directly to each other.