Raspberry Pi Safe Clean Up - the decorator way
If you want to do gpio in one line, you can use functools.partial and either functools.wraps or functools.update_wrapper.

As you are using wraps already, you may as well use partial too.

def gpio(func):
    return update_wrapper(partial(func, GPIO), func)


Now it's a simple one-liner.
If you don't need @wraps, this can be further simplified to:

def gpio(func):
    return partial(func, GPIO)




Ways I would change the program:


Adding an option to SafeGPIO to have the option to handle errors.
Merging gpio and safe_gpio into one function would improve my user experience.
Less functions to remember, whilst keeping the option for it to be safe.
You don't use @gpio, so would you ever use it?

If your response is no, you should consider removing it.
As you could just import GPIO.
And it seems like a lot of overhead for importing GPIO.