Yes, it is possible. Use apex_util.create_user. Some 19.1 documentation is at https://docs.oracle.com/en/database/oracle/application-express/19.1/aeapi/CREATE_USER-Procedure.html#GUID-95721E36-4DAB-4BCA-A6F3-AC2BACC52A66.
The current user (i.e. workspace schema) does need administration privileges, but you can get around this if necessary by setting up an Oracle Scheduler job to run the PLS code. Your workspace will need the privileges to create scheduler jobs in that case.
In your application's shared components, in the Security section at the bottom of the page, Runtime API Usage, set it to "Modify Workspace Repository".
In your code procedure you will need to use wwv_flow_api.set_security_group_id (workspace_id); before running create_user. You can get the workspace id from the view APEX_WORKSPACES. You may also need to set wwv_flow.g_flow_id and wwv_flow.g_instance to the app_id and session_id respectively. Create a separate procedure to do these things as it will often be needed if you want to access apex views and API's when calling procedures from within APEX.
Beside Rick's reply, I would like to tell you that you could customize the workspace login page. Please take a look at these links
I hope that helps
Rick, is there some example of this action plan?