There are lots of reasons.
One may be that the OEM has many 'similar' machines, so writing the entire program referencing identical integer file points means that the core logic never changes. They merely connect up the actual physical I/O to the 'mimic' points in the program.
One example of this could even be as simple as where a manufacturer makes a machine with all pushbutton control, and an upgrade that has touchscreen control. By mapping to internal points, either set of 'physical' inputs can be used.
Another reason could be when someone is developing a program, without any idea what the physical I/O layout will be (actually, that's pretty common, believe it or not). Again, once the logic is complete, the I/O can be mapped later on.
Then there is the case where I/O points are going to be shown on an HMI. In some cases, HMI's cannot directly read all I/O points, but even when they can, it is more efficient (communications wise) to group data together into blocks that can be read at one time.
One more reason, is that with more and more asynchronous scan PLC's showing up, is that sometimes it is important to make a scan-invariant copy of the input table, and sometimes even a scan-invariant copy of the output table in order to simulate PLC's with a synchronous I/O scan.
Just a few reasons off the top of my head, there are many more.