Since you have posted this in the RSLogix500 forum I will answer this from the SLC500/micrologix point of view. Most of this will pertain to any AB processor.
The SLC has one program file that is scanned by default and that is program file 2. As you have mentioned, we recommend separating any PLC program into program modules or subroutines. To have those other program files scanned by the processor you must tell it to jump to them - thus the JSR or jump to subroutine command. If your total purpose is to have the processor jump to the subroutine and return back to the rung after where it was called from when complete, then the JSR is all you need. You simply insert a JSR in your program and the only information you need to provide is the program file it will jump to. That is the most common use of JSRs and subroutines in the AB platforms. We would suggest that file 2 be filled with nothing but JSR's pointed at multiple program files (plus maybe some minor overhead logic). Once again, for that purpose thats all you need. The processor will jump to the program file required, go to the end and return back to scan the rung immediately after the calling JSR. No RET statement is necessary unless you want it to jump back before the end of the program file.
The SBR gets a little more complecated. The JSR instruction can pass parameters to the subroutine and the SBR is necessary if you intend to pass parameters and it should be the first rung in the program file you are jumping to. Frankly if you need to do this, you need to ask yourself if your program is over complecated. There may be a rare instance where this is necessary, but they should be rare.
Hope all this helps. Check out the vids on the the JSR instruction for more.