How to structure modal operator correctly with macro like step by step execution?
Your operator is not a modal operator and you are calling a modal operator inside it ,  SnapOriginObject will exit and leave transform.translate('INVOKE_DEFAULT') running behind ( it won't wait as you expect ) , you have to create a modal operator ( see the templates ) where you catch the mouse events ( movements, clicks, position ) to move the empty and delete it when you are done.