This part of your post
In addition, on expiry day the holder (...)
Due to the daily variation margins calculated by the clearing house on each market close, you have already received/coughed up what you should upon expiry. If the contract is cash-settled, the story thus ends here. In case of physical delivery however, although there will be no additional cash flows, the underlying needs to change hands (from the seller to the buyer) as legally specified by the contract. Note that only a minority of future trades are held until expiry anyway.
To better understand, take the situation where you are a producer who wishes to secure a certain price for whatever it is you are producing and planning to deliver at some future time $T > 0$. You find that the value at which the future of expiry $T$ trades on the exchange is honest and decide to lock that price by selling a future today. In other words, you enter a legal agreement with a party $A$ which accepts to pay you a certain amount $F(0,T)$ to receive your goods at $T$. So far so good. But now, what if the counterparty with whom you agreed on initially, decides to sell the future contract to some party $B$ at $t^* < T$? By offsetting his position, $A$ is now free of any obligation. These are transferred to new guy $B$ for whom it is as if he had agreed to buy your goods at $F(t^*,T)$ and not your initial price $F(0,T)$. So are you screwed because the price has changed? Well no, thanks to the margins mechanism this is completely transparent for you. Indeed, since the inception of the trade, the clearing house has regularly credited/debited your margins' account starting from the initial future price of $F(0,T)$. The only thing left to do for you, is to meet your obligation upon expiry $T$ i.e. deliver the underlying in case of physical settlement. All in all upon expiry:
- You will have made $F(0,T) - S_T$ (got rid of your goods for the price you wanted)
- Party $A$ will have made $F(t^*,T)-F(0,T)$ (probably a gain since he decided to sell early)
- Party $B$ will have made $S_T - F(t^*,T)$ (received the goods for the price he wanted).
Thus, everyone is happy and it is a zero sum game, as expected. In conclusion, the payout of buying at $t=0$ and holding a future up to its expiry $t=T$ is indeed $$ S_T - F(0,T)$$, which is exactly the same payoff as that of a forward (if we neglect second order effects)