Tables such as APEX_APPLICATION_PAGE_BUTTONS often have a column such as BUTTON_ID which can be used to identify a component even if its name changes. The problem is that this ID column has its value altered whenever the application is exported and then reimported. This makes it impossible to consistently reference a given component accross different instances of the same application that might exist due to exporting.
A simple solution is to add a column to these tables that has a unique global id (a GUID) for each component. That GUID never changes, regardless of exports or imports, making it possible to consistently reference the same component.
An application with an authorization scheme that controls access to components based on component id.
Preferred Solution (Optional)
Add a column to application metadata tables that will contain, for each component, a globally unique id that does not change during application imports.