Treat the EntryInternal installed state as a "something is installed, not necessarily everything" state (documentation more than anything else, this is already the reality)
Add meta information to each DownloadLink item in an entry, to say which is installed, and allow Engine's install and uninstall to both take the item index (uninstall doesn't right now).
Don't require it for uninstallation when more than one item is installed, just treat unspecified DownloadLink as removing the entire Entry (that is, remove all installed DownloadLink items).
When specified, only remove that item. note to self for implementation: only mark EntryInternal's state as uninstalled if /all/ DownloadLink items have been removed.