1. Over billions of instances, there's no way an individual object can be unique in every instance.
2. "Procedurally generating" objects is really just a fancy name for random generation.
3. Procedural generation (i.e., random generation) of unique and high-quality story-based content over billions (heck, even mere thousands) of instances is just not practical -- there are only so many variations possible on mission text. Randomly changing one word from an existing mission script doesn't make the new mission interesting.
4. Human-crafted content will always be superior to machine-generated content. So there's no point in designing and implementing code to crank out millions of pieces of junk -- just hire smart and talented people to handcraft a few really good assets.
5. Why would we want billions of worlds to explore, anyway?
First of all, we need to agree on terminology. "Procedural generation" does not mean "generating the parameters that define an object." It's not about randomizing values to, say, Eyes_009 and Hands_012 and so on. What's being "procedurally generated" aren't the input values, but rather the appearance and active behaviors of objects whose forms and actions are specified by the input parameters (whatever they may be).
So in the case of Spore, you the player will get to pick the hands and eyes and mouth and so on of your creature, including where they go on the creature's torso -- no procedural generation there. What gets procedurally generated are the movements and dynamic behaviors of the creature whose pieces you put together. The "procedures" -- the code -- is where the knowledge of movement and behavior is embedded. And it's this code that takes the small set of values that describe a creature's physical components and from them generates on the fly the run-time features determined by those values.
What this means is that although all creatures may perform the same types of movements at a conceptually high level -- mating, for example, or swimming, or calling to similar creatures -- each specific creature (as defined by their input form parameters) will have a unique version of that movement. Every different set of body values will produce a different set of movements. They won't be all that different; there's only so far you can extend bipedal locomotion, for example. But to be able to create a software system that's capable of taking a few input values and generating visually plausible movement for creatures with two short legs, or four long legs, or six widely-spaced legs... that's nothing short of astonishing.
And that's the beauty of procedural generation: you don't have to write unique code for every unique object. Instead, you put a lot of effort into writing code that's "smart" enough to know what to do with a wide range of input parameters. And then you turn your code loose on whatever input parameters your users come up with and watch what happens.
In essence, the art of procedural generation is to move the complexity of dynamic object behavior from the data to the code. Once that's working, the size of the input data becomes amazingly small. And that's a major benefit when, as I mentioned earlier, you're dealing with a lot of objects to be stored or communicated.
The price of this, of course, is that your code gets a lot bigger and a lot more complex, since that's where you've shifted the rules for how objects behave. But at least that's a static problem, not a run-time problem.
So, all that said, let me now try to address the specific objections raised.
1. True, individual objects can't be unique over that many instances. However, if any individual object has enough different input parameters to a procedural behavior generation function, it only takes a few values before combinatorial effects kick in to allow a very large range of different forms and behaviors.
More importantly, a world doesn't just consist of one type of object. It's reasonable to expect that planets in a procedurally generated galaxy might have the following variable values at a bare minimum (I'm really just scratching the surface here):
- distance from the star they orbit
- eccentricity of their orbit
- rotation speed
- core type (molten metal vs. cold metal -- determines planetary magnetic field)
- atmosphere type
- atmosphere densityv
- mean surface temperature
- surface temperature variation
- plant life: hardiness, number of forms, growth style for each form, color(s) for each part of each form, etc.
- animal life: hardiness, number of forms, physical parameters for each form, etc.
- intelligent life: attitudes, outlooks, technology levels, government types, architectural styles, etc., etc.