Also in this line of thinking: hosts can be assigned an entire subnet, and applications can get individual /128s. This way, a single host can provide a bunch of independent services, which can be broken out into real machines as the system grows without renumbering.