How to generate extra addresses from BitCoin wallet?

BitCoin programmer question here (Please don't answer if you're just guessing). How does the logic work for generating multiple addresses for a wallet? For example, to generate a wallet address, the private key is hashed, then hashed again, then the 1st 4 bytes are added to the end of the private key, then there's some more hashing, then it's converted to a base58 string with the proper prefixes added.

I understand that. But doing the same process again produces the same wallet address. What logic is used to generate a different address from the same keys and how is is validated against the public key?

Ether address:  7d4a164e818a05e185be59b5155d4194cce53361