What might be a logical place to you to start the program, is not necessarily a logical place for the computer to start the program.
It is all to do with whether or not the computer can properly work out the precise position (in machine co-ordinates) in the line.
It may be that using a subroutine necessarily denies it that function, unless it goes through the sub-routine to work out the final position.
In such circumstances I have often included a "positioning" line which doesn't mean much, because the computer is probably already there (and so ignores it), but when doing a run from here it is a place where the computer can get a finite position.
This is fairly important when you are using longs lines of GCode which only have one reference position, or have no command code (because it is global) and the computer has to back track to find the finite place it can tell what it was it was supposed to be doing.