example: how 'practical' (ok) is it to having some code running in your main loop().. doing whatever.... checkng sensors..buttons..(waiting for input).. and then based on a logic choice.. jump to one of these 'labels'.. (perfrom whatever task in there.. or just run inside that 'label' (routine) doing, whatever until it needs to break back out?
1.) how do you 'break' back out into your main loop? (or where ever the pointer was at before it jumped to the label/sub-routine?)
Using goto in this specific code is not very clever. A simple while(1) loop is cleaner and much more readable. Using goto is not taboo but in most cases not needed and entitled bad behaviour by most experienced programmers.
how do you 'break' back out into your main loop?
With another goto, but keeping the overview with lots of gotos is almost impossible.
how efficient (or frowned upon) is this??
It's quite efficient, usually one machine code statement.
You should never goto from a sub-routine to the main program (the compiler probably would mark that as an error, I guess) because that would clobber your stack and you run out of memory in no time.
There is absolutely nothing wrong with goto statements; however, they are not usually a good choice when using a high level language. Ultimately, most machine instruction sets ONLY have goto instructions rather than the other high level control structures more commonly used, so gotos can be more efficient from the machines perspective. However, in all but some situations, the additional optimization (which should be done in assembler anyway) isn't critical, and makes the code harder to maintain.
Ultimately readability is more important than efficiency in the vast majority of cases...