Depends on the author I suppose. Some reasons can include:
Easy to put Master control sections (MCR's) around outputs.
The state of an output may change based on several things (Set / Multiple reset's come to mind)
The outputs may be send down a communications link, and it's easier to keep the final message building till last
For testing. Perhaps you want to test code without firing outputs; you can put an 'END' type statement before the actual physical outputs.
In some cases, you may not even have the physical I/O Assignments available when you start programming (Projects where one person/team does hardware, one person/team does software), so you code generically with internal bits for I/O, and then later drive them from the actual I/O assignment when you have it.
Just a few possible reasons why, there are more I'm sure.