Portal.js is a single script for managing member signup and accounts - there is no requirement to use it. If you want to build your own signup UI, with your own branding, you can.
This is exactly the same as how Stripe (and most other services) work. If you want an out-of-the box “just works” solution - you have Stripe Checkout, which contains a small “Powered by Stripe” logo and has limited customisation. If that’s not enough for you, and you want to build your own UI, you can use Stripe Elements - giving you lots of shortcuts to create a custom flow, while being able to completely whitelabel it. If that’s still insufficient, you have the Stripe API and you can write something totally custom.
Ghost works the same way. We ship with Portal - which is a fixed UI. You can also build your own UI directly into the theme, completely whitelabeled. You can also use the Ghost API directly and build your own custom experience.
These are the options that are available — and at present there is no plan to change them.
Here are the docs for building members flows in themes: