(Not this code, but looking at implications of it.) It seems odd to me that we can delete the live version of everything except components. I don't like the immediacy, but it seems inconsistent to treat components differently.

Did you test publishing a unit w/ a component, going to draft, deleting one component, viewing live? The component should still be there in the live even though it's not in the draft. (I didn't test.) Then publish the unit, view live, the component should be gone. And then the same test but instead of publish, discard draft and ensure the deleted component is not deleted.