Set special permissions to Obsolete Bbjects (WT Parts and EPM Documents) to avoid to add them in a new structure.
If a object is obsolete, user shouldn't use them
From a WTPart perspective creating a new BOM line only needs access to the part master, which you cannot hide without hiding all versions, which is usually undesirable as access is usually required even though the latest version is obsolete. There can also be valid use cases where you want to temporarily release an assembly using an obsolete component until inventory is used up.
The most logical way to handle this is to have some controls in your release/change process to validate that no components are obsolete before allowing the assembly to become released. You can achieve this programmatically with business rules or a custom expression in the workflow, but another approach would be to make that part of your check/promote/approve process.
A release process should have controls to stop assemblies being released before all the components used in their bill of materials, preventing release of an assembly with inwork components is no different that preventing release when there is an obsolete one if that is a business requirement.
A user should be informed when adding (copying into a structure, typing in,...) immediately.
We control this with the release process too.
But, some users have already asked for such a "pre warning" functionally.
This should be implemented via the business rule framework. There are two many use cases or requirements and there should be a consistent and flexible solution to achieve such like requested here. Today it is available to embed this by customization but it would be an great enhancement if this would be configurable. Jeffrey Zemsky