IPv6 is designed to assign multiple addresses to your network interface.
By default an interface is assigned a link local address, that can only be used inside the broadcast domain of your network. So all the host/routers connected to the same switch can talk to each other, without being configured to work on the internet.
When you connect a router to an ISP it will receive a network address which it will advertise to all the hosts in the network. The hosts in the network can use the advertised network address and auto configure a second address on their network interfaces. You can also manually configure, and also make manual subnets by configuring the router.
When you connect a router (may be the same router) to a second ISP, then the router advertises and other network number, and all the host on the network will add this to their interface as well. With some stacks you can configure policies for costs and quality to use one ISP over an other, of course this requires a bit more work by the network administrator. Multihoming with IPv4 was a lot more difficult.
You can also make your routers advertise Unique Local Addresses, basically a private range, then you can have a stable numbering within your organization. From what I understand from the wiki article, the unique local addresses are hopefully still be globally unique so you can route between two ULA networks for example when two companies merge (which is an extreme hell now with IPv4 where every company has chosen the exact same range of 10.0.0.0 addresses)
http://en.wikipedia.org/wiki/Unique_Local_Address
I am not sure if using ULA inside your network, to make internal-services provider independent, is recommended.
So what I am saying is, that NAT is not necessary, because it was build in the protocol to work with private ranges and public ranges at the same time.