To correctly answer your question, we will need to separate the R3 instance from R3 applications.
The DB, which is initialized during setup, is manged by the R3 instance (the process running the R3 service). When you install R3 apps, the original DB is not replaced, created or overwritten. Installed apps get their own schemas within this 1 DB, so that each app has their own name space.
This means, that when you enable an extension in your DB - it´s enabled for all apps. If you plan to release and then later install your app in another R3 instance, you will need to execute your DB changes once in this DB (add custom types, extensions, etc.). The apps are separate from that.
Having apps with "the same name" has nothing really to do with the R3 DB itself. The system will block installation/creation of identically named apps only because the DB schemas are named after the app name and they must be unique. But other than that, it would work fine.
When thinking about using custom types, please take the time to familiarize yourself with how R3 works. You can directly open any R3 DB with your Postgres tool of choice. Adding/using things like custom types with R3 is not a simple thing to do.