As for why they'd do it this way rather than programming a 'real' movie player: a lot of times tricks like this and the train-NPC are used are because you only have a certain amount of time the engineers have to program new features vs fixing bugs, so designers will often build features out of existing engine functionality and piggyback on existing code that already works.
So instead of making a custom end game cutscene player, which carries with it adding new test suite, test cases, etc etc you go 'wait, we can just lock the player here and use our existing ability to have an NPC talk loud enough to be in both speakers and just switch an object in front of a player".
Another example of this is the Halo engine has code for vehicles and how they're networked in multiplayer. So anything that moves on the map in multiplayer is a vehicle as far as the engine is concerned. The security cameras in 3/Reach? Vehicle.
The soccer ball?
Vehicle.
The giant monitor on Cold Storage?
Vehicle.
Golf ball?
Engine considers that the same thing as a Warthog or a Tank.
Bonus content
The Warthog's horn in Halo 2 onwards are just programmed as the Warthog's "gun", so that's why the horn button is the same as the 'fire gun' button for every other vehicle. They even prevent you from spamming the horn indefinitely by having the horn-gun "overheat". As above: "hey, our engine already knows how to make a vehicle fire a weapon in MP, and also network the sound it generates. Let's just make it a gun that shoots nothing and it's muzzle sound is a horn instead of implementing a completely new and separate horn-honk subengine"