Another possibility is the your previous move had not reached the game server due to your network. You thought you made the move already on your computer, but on the opponent's computer you didn't make any move and your timer ran out, as well as on the game server.
You can judge this by checking the kifu of your game and see it.
Possibility A: The opponent's final move is recorded, which you didn't see during the game
Possibility B: Your final move (which you believe you made) is not recorded in the kifu
You didn't receive the opponent's move when he had already done a lot before because your network became too slow and then finally disconnected. Your time could have already run out on his computer as well as on the game server before your final disconnection, OR, he manually declared win after your disconnection when the timer is actually paused. (But the latter is unlikely as he cannot declare win until 60 seconds after the disconnection.)