After the command completes, the reset area is, therefore, activating the label does not have any effect. Throwing an error (non-local exit) seems to prevent this step, but it could be an error.
Trick: deactivate-mark
If the editing command sets this value to t, deactivate the character after that. The command loop sets this value to nil before each command, and checks the value when the command returns. A buffer modification stores t in this variable.
So just do it at the end of your command:
(setq deactivate-mark nil)
source share