unwind() doesn't actually impact program flow
Oh yes it does. Just how do you think you can return values from an upper scope without restarting from there? Not mentioning that that would be of very limited use if it didn't!
gives an alternate interface to it, which effectively relieves you from having to specify the target context yourself. But OTOH it requires you to be able to "mark" the context you want to return to. Reading its source code will surely teach you how it builds up on unwind