Thanks, I think I'm starting to understand a little better. I was getting confused and thinking that transactions transfer an amount from one bitcoin address to another.
What transactions really seem to do is simply to name outputs from other transactions as inputs to this transaction, provide 'script' which when combined with the output script of those transactions evaluates to true, thus proving the right to 'claim' the entire set of funds declared in the output, and then set up a new set of outputs with script that would then be combined with the next transaction to set up another such sequence.
So there is no 'adding bitcoins to a bitcoin address', there is only 'rewriting a set of old outputs with a new set of outputs' with the inputs used as a mechanism to identify, and provide proof of the claim to, the old outputs.
And so to verify a transaction, a miner just needs to verify that the inputs properly claim outputs of a transactions which themselves were validated, never needing to go further back than the transactions directly referenced by a new transaction.
Seems like they must, doesn't it? But I guess they can also forget about individual transaction outputs once they have been claimed and then can forget the whole transaction once all of its outputs have been claimed, since no valid transaction can ever reference those outputs again.
Yeah having to keep track of every unclaimed transaction output for all perpetuity sounds very hard when there are significant numbers of unclaimed transactions.
And having to swallow the feed of transactions (both unverified, and verified within blocks) when there are hundreds of transactions per second sounds even harder.