Okay, to try and be very clear here.
All machines on a single subnet home LAN are intended to share a /64.
eg
2001:db8:1234:XXXX::1
2001:db8:1234:XXXX::2
2001:db8:1234:XXXX::3
in the same way they share a single subnet LAN today under IPv4
192.168.XXX.1
192.168.XXX.2
192.168.XXX.3
The main difference being that they can auto-configure addresses for themselves in this space without DHCP or manually assigning numbers without fears of conflict.
Yes. For IPv6, think of a /64 as the default LAN size. IPv6 autoconfiguration doesn't work with longer prefix lengths. You can run longer prefixes on your LANs, but it'll break certain things. If you need more than one subnet, request a /48 and break it into /64s.
Subnetting in IPv6 isn't any different than IPv4 really. Just uses bigger addresses. Subnetting under IPv6 is simpler, since there are essentially "standardized" prefix lengths to use for different things (ISPs get /32s [or bigger], businesses/home users get /48s or /56s, or maybe /60s, and LANs are /64s), in contrast to IPv4 with a complex VLSM situation. Under IPv4 you would always have to carefully assign your address space with conservation in mind, and balance subnet size with the number of networks you think you might need, etc. With IPv6 LANs are all /64s, and you'll never run out of addresses in a LAN since you have 2^64 - 1 to work with. And you won't have to worry about running out of subnets since it'll be trivial to get a /48, which gives you 64k subnets to work with. The huge amount of address space makes subnetting far simpler, easier to identify (think quick: what network is 192.0.2.219/27 on! Now, try: 2001:db8:1234:10::1/64), etc, etc.
Regarding client vs LAN IP
When I have the router be the tunnel endpoint it has an explicit GUI setting for everything you described. The client address is used as the WAN interface v6 address and the LAN range is sent to the LAN as a router advertisement prefix. This all seems to be correct given what you have described.
One the single machine setup (where the computer itself is the tunnel endpoint) does anyone know the steps to configure (either via gui or command line config) the system to present a "localhost" router advertisement that the en0 interface could pick up and autoconfigure from or a way to manually assign an address and "router" to the
I have tried (in the gui) assigning the LAN address as the en0 interface address and setting the router address to either the tunnel's fe80:: address as listed in ifconfig or the client tunnel endpoint. The result is that all v6 traffic breaks down until I remove the en0 address and run the set default v6 route command again. Does anyone know what I might be doing wrong here?
For reference, setting the address manually with the link local address of my router in the home network works fine. Is there something about the tunnel's link local address that makes this not work?
Not exactly sure what you're trying to do here, but I'm assuming that you want to assign an address out of your routed /64 on a single tunnel connected computer and use that instead of the address on your tunnel interface. If the computer has the ethernet interface plugged in, you mere add an IPv6 to the ethernet interface from the routed 64. If it's not, then you can add one to your loopback interface. As for autoconfiguring, well, I don't think that'll work on the machine which is actually doing the route advertisements.