For example, make a new file and copy rungs 17-24 into that file. Rename the file TRX_HMI, and say another for the RX_HMI (Any commands and integer passing from the HMI to the PLC)
LAD 2 will now contain only JSR's and CRITICAL clearing of PV data, Machine logic etc.
Make the FILE 3 your Machine code
Make the FILE 4 your PLC Transfer to HMI
Make the File 5 your HMI Transfer to PLC
etc.....
Try to make your BLOCK I/O a seperate file. For example, in large projects move all of the discrete I/O to a location where it can be interpereted properly. (MOV I:1:0 -> N10:12 LENGTH 10 Words) In the user PLC code, there should not be any DISCRETE talk of OUTPUTS. Only use the Binary outputs at this point throughout your program. Now, use the Binary output that you have set and use that in an "OUTPUT" File to enable the actual OUTPUT. That way, you don't need to search all over the program looking for all of the instances that turn SOL A on. They will all be contained in 1 rung, instead of in some cases many times.
This structure will always work well, but really comes down to PLANNING. Have a seperate file for each known function.
Scan time will not become an issue as long as you are talking normal machine's today. With all things considered, you must always be aware of the scan assignment though, indicated in your first JSR routine file.
Good luck, and have a great time writing good quality code!