Question: When looking at old games like Mario64 or DukeNukem3D, all the mirrors in the game are essentially just holes in the wall with a mirrored copy of the geometry in front of the mirror put behind them. In the case of DukeNukem3D one can even activate no-clip and walk into that mirrored room.

In contrast modern games use a render-to-texture approach for mirrors. This leads to the mirrors getting noticeably pixelated when getting to close to them. One of the first games I noticed this approach was Luigi's Mansion, but it seems to be used in almost all modern games.

What change in the hardware or engines made the second approach become so dominant these days and what are the benefits to it? In terms of pure visuals the first approach seems superior, as it doesn't suffer from pixelation issues.

Answer: 
1. Using RTT (render-to-texture) allows to easily scale rendering quality (resolution, LOD, lighting complexity) for adjustable performance. RTT also makes it easier to replace the surface with a cubemap at a certain distance where it's hard to see the reflection exactly.
2. Since the output is a texture, there are more options regarding what can be done with it afterwards (lighting, shading, blending, distortion etc.).
3. If a mirrored version of geometry is placed in the scene, it would require more complicated culling when it intersects with real geometry and could be seen behind the corner. In older games, levels were designed to avoid this. Not to mention that somebody has to do the actual mirroring.
4. If geometry is not manually mirrored, rendering must be done by changing the view matrix and culling mode (to compensate for the space inversion in the matrix), and using the stencil buffer to cut out the mirror. Modern engines prefer to create all render states in advance, so there would be a minor issue with making copies of every scene render state with the required changes for mirror rendering.

So basically using RTT gives more freedom to everyone.
Duke Nukem handle that by re-rendering the geometry behind the mirror, the other answers are partially correct. There are areas behind mirrors that actually contains no geometry (in game data files), the geometry is re-rendered at run time infact, the reason for those areas to exist is to avoid to place accidentally a piece of level there when editing the level:

since theres' an area marked you will not place accidentally any geometry in there.