Ohne das jetzt probiert zu haben, wäre diese vereinfachte Form deines ursprünglichen Ansatzes nicht vollkommen ausreichend?
Delphi-Quellcode:
Node := VST.GetFirst;
while Assigned(Node) do begin
NodeTmp := VST.GetNextSibling(Node);
if VST.Selected[Node] then begin
VST.DeleteNode(Node);
end;
Node := NodeTmp;
end;