I can think of one reason:
* A user loads the front page.
* By the time the user clicks "More" at the bottom, page 1, and all subsequent pages, have been updated with new content.
* So the server can't provide the old page 2 to a user who just saw the old page 1, for the reason that neither of the original pages even exists any more.
* To avoid confusing the reader, instead of providing an out-of-sync page 2, the server instead shows a "expired link" message.
Thanks for the reply, I've replied to this answer (above/below/Unknown or Expired Link).
I suspect that PG's approach is something more than peccadillo. The HN software appears to afford a great deal of power for managing the community, and managing the community is much more important than worrying over expired links. I'll add that I've never seen someone quit HN over expired links, but several over community behavior.
Seeing as YC applications require HN accounts, it is unlikely that YC takes HN's functions lightly.
As to why pg can't use normal pagination instead of user-specific state, I dunno, why not just use Ruby or Python (or PHP!) for the site instead of Arc? Short answer is, I suppose, because he can, and he's likely more interested in satisfying intellectual curiosity than designing a normal pagination system. jm2c.