Your confusion, I believe, arises from the fact that arrays are exactly the solution you’re proposing whenever you don’t know in advance how many values you’re going to be working with (and even, often, if you do know).
If you know you’re expecting 3 values, sure, declare 3 different variables if they serve 3 different roles. Otherwise, put them in an array, and have enough identifying information in the objects to find them again later. For better or for worse, you can’t create new variables on the fly when you discover there are more values than you have programmed your code to deal with, unless, of course, those values are simply stored in an array (or hash, or set, or …).
I’ve noticed that some of the code in the chapters feels incomplete because objects don’t have enough identifying information. Stocks, for example, are completely anonymous, which makes them harder to conceptualize. It’s much easier to think about finding Apple’s stock in an array when the stock is identified with AAPL as a field that can be set and queried.