Using command blocks, how can I make the person that touched the command block's button get teleported, not the person closest to the command block?
The thing about command blocks is that they are operated by redstone signals, which can vary from circuts as small as a single button to circuts as huge and sprawling as mob farms to complex circuts like self-powered timers. Redstone signals do not carry identity (they may not even have it), so there isn't a way to tell who pushed a button.
The Guy With the Hat's answer is good to use - teleport the player closest to the structure. You will likely get more perfect mileage if you use a pressure plate on top of the block instead of a button, and then you can use a radius limiter on the @p (I think it's
r=1 or whatever other number) to ensure that some random player won't get teleported when a mob presses the button.