TO really fit your needs, I think it’s better to rewrite some part of wp_insert_user()
function, some part can interrest you
$user_email = apply_filters( 'pre_user_email', $raw_user_email );
And :
$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );
if ( in_array( strtolower( $user_login ), array_map( 'strtolower', $illegal_logins ) ) ) {
return new WP_Error( 'invalid_username', __( 'Sorry, that username is not allowed.' ) );
}
And :
if ( isset( $userdata['role'] ) ) {
$user->set_role( $userdata['role'] );
} elseif ( ! $update ) {
$user->set_role(get_option('default_role'));
}
I think you’ll be able to combine all these parts to make your own user registration.
Hope it helps !