Also, they're not infinitely divisible, but only down to a minimum of eight decimal places (0.00000001).
The current client only divides them down to eight decimal places, but there is nothing in the protocol that prevents them from being divided further. If the need should arise, they could be divided further by upgrading the client program. They are essentially infinitely divisible.
Well, there would need to be a hard fork.
What really happens is that the tx_out contains a field of int64_t with the value in protocol units (a satoshi currently). I think that much more likely than adding 3 more places and keeping int64_t, we'll go to int128_t and add a whole bunch more places. Either way, it would require bumping the transaction version number, and that would break all old clients (more or less, I don't remember off the top of my head if that is a hard fork or not, I think it is, but even if it isn't, it would still mess them up pretty bad).
It is actually a good thing that int64_t has a lot of headroom above the maximum number of coins that can ever exist. It means that we can still use 64 bit math to do (exact) accounting of value denominated in satoshis. For example, at current market prices, we could do accounting for a 400+ billion USD entity in bitcoin before we have to start worrying about running out of bits.