I've built a feature which prevents a user in the CMS from deleting a file (only u linking it) if that file is in use elsewhere within the system, but it isn't very efficient. The idea you propose is I think very much needed. My solution was to setup a FileUploadField data extension which then did a quick lookup for each file in a field (one or multiple) and went through the entire system looking for references to that File's ID (as long as thenDataObject was defined to have a relation of some sort) and it would reference the table directly instead of hitting the ORM. I really don't think files and DB relations should be orphaned like that if user accidentally deleted it under one specific data object. Then to fix the issue they have to reupload all the orphaned references to the deleted file.
A better solution may be to add a method (either directly in API or via DataExtension) to facilitate a simple ->getReferences() and ->getReferenceCount() which you could check to see if it has more than one reference and then allow deletion if it's is < 2.
Sent from my iPad