With most implementations, the key is simply a longer key that includes all of the key values, with a separator. No magic there 😉
In your example the key values could look something like
"123499|John Doe|Conway, NH" "32144|Bill Gates| Seattle, WA"
One of the characteristics of these indexes with composite keys is that the intermediate tree nodes can be used in some cases to “cover” the query.
For example, if the query is to find the Name and City given the ID, since the ID is first in the index, the index can search by this efficiently. Once in the intermediate node, it can “parse” the Name and City, from the key, and doesn’t need to go to the leaf node to read the same.
If however the query wanted also to display the phone number, then the logic would follow down the leaf when the full record is found.