In the Define User Shortcuts module, you can define shortcuts, but they don't take effect until you quit the program and start it up again. All the "Save" does is set preferences.shortcuts, and then when you quit the program (whether or not you "save changes") it saves the preferences to disk. Thus next time you start up the shortcut is therefore defined.
Tricky problem. For a given key combination, you cannot just define a new QShortcut for that because it just doesn't work (nothing happens). And every user defined key combination has a QShortcut set up on startup (even if there is no corresponding operation), which means as it stands none of them can be changed after startup. So unless you can change the operation that is called for an existing QShortcut, this seems like an intractable problem.