I am no guru, but here is how I see it.

GOSUB -- There is a limit to how many GOSUBs that can be nested for different core devices because of stack capabilities. The manual talks about the limits. Other than nesting you can have as many as you want. Because info is written to the stack so the code knows where to RETURN to a certain number of extra cycles will be used. How many I am not sure.

GOTO -- Does not use the stack so the above "problems" are not a consideration. Some say a program with many GOTOs is some type of pasta programing.

WHILE/WEND -- Is basically a GOTO after the WEND. So a GOTO or GOSUB is OK. As long as the stack/nesting problem with GOSUBs is considered. No nest, no problem.

So basically, IMHO, it comes down to program style. Many use to say the code should "flow" with out the need for GOTOs. I find myself coding in blocks more and more and GOSUBing to where I want. Maybe this is from learning more about other languages that are Object Oriented? My "MAINLOOP" will often be a bunch of GOSUBs.