I think the real GOTO-harmful lesson is that for any non-trivial program, you'll end up implementing conditional blocks, loops, and functions by hand. There just aren't other abstractions on top of a von Veumann architecture, and GOTO arbitrary line rarely does anything other than those three cases, and when it does, it's exceedingly hard to get right. Like sure, true spaghetti code is bad, but it's also really hard to write.
The whole GOTO-harmful is a product of a bygone time much as anyone needing to keep track of a jump table by hand is now.