OK, here my solution which allows to move the DT, allows deleting the DT via contextmenu and restores it when being deleted by clicking on the DT. I don't quite like the fact that I cannot avoid the DT from being destroyed and have to restore it. Also, checking the stack to allow for deleting when being called by the contexmenu is a hack which might not work sometimes in the future. So, if anyone finds a more documented solution, I would be glad to hear it.
function DataTip_test
figure
h = plot(rand(100,1));
DT = datatip(h,'DataIndex',22);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
% ==========================
function RestoreDT(varargin)
% Allow deleting when parent line is being deleted
if strcmp(h.BeingDeleted,'on'); return; end
% Allow deleting, if triggered by context menu
db = dbstack;
if strcmp(db(end).file,'createContextMenu.p'); return; end
% Otherwise, restore datatip
DT = datatip(h, 'DataIndex',DT.DataIndex);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
end
end