The short answer:
SQL reads back over the transaction log entries for the transaction that needs to be rolled back and generates compensating operations (operations that reverse the effect of each logged change) which it then logs and executes.
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass