I involved myself in this conversation way-back-when on the electro-tech forum, regarding state machines:http://www.electro-tech-online.com/general-electronics-chat/113718-state-machine-mcu.html
In it, me and another user (MikeMI) have a discussion regarding state machines and whether using IF-THEN logic and GOTOs for such implementations (vs a switch-case construct) is better, worse, or...?
Anyhow - he posted an image of an implementation of such a state machine:http://www.electro-tech-online.com/attachments/general-electronics-chat/48665d1291323569-state-machine-mcu-elevator.png
(you'll need a login to see it) - or check it out here, rehosted: http://i.imgur.com/JkND1Av.png
Anyhow - I found that example of using IF-THEN logic and GOTO to implement such logic to be very interesting; it wasn't difficult to follow, and made me appreciate GOTO a bit more (I grew up on Microsoft BASIC on a TRS-80 Color Computer - GOTO was in my blood for a long time, until it was excised during my first professional software development gig).
I now think of it as one of those tools that one should be aware of, but should only use when the situation absolutely warrants it - breaking out of deeply nested logic is one potential area (provided you don't break a stack or something); though I would perhaps do some investigation into that logic to see if maybe there is some way to make it more workable without requiring such a sledgehammer measure.
...and a second potential situation would be this example of a state machine.
I have also seen an instance (when I worked at a place that used a variant of COBOL called DB/C) where GOTO was used to jump out of (or into? it's been so long now) an error "trap" routine; but the developers there who worked in that system (I was only peripherally involved) made it explicit that such use was the -only- place that GOTO was allowed in the software they developed, and no where else.