Problem with email_exists in shortcode

This is a basic version of your code above which seperates the registration logic (handled on init) from the form output done by the shortcode.

It will basically work, but is missing any validation so just to show the concept.

$wpse_email_exists = null;

function registration_form_shortcode() {

    global $wpse_email_exists;

    $output="<form name="registration" action="" . esc_url($_SERVER['REQUEST_URI']) . '" method="post">
                <label for="email">Email</label>
                <input type="text" name="email" value="' . $_POST["email"] . '" />
                <input type="submit" name="registration_submit" value="Send" />
            </form>';

    echo $wpse_email_exists;

    return $output;
}

function manage_my_registration() {

    global $wpse_email_exists;

    add_shortcode('registration-form', 'registration_form_shortcode');

    if (isset($_POST["registration_submit"])) {
        if (email_exists($_POST["email"])) {
            $wpse_email_exists = "EMAIL EXISTS";
        } else {
            $username = $_POST["email"];
            $random_password = wp_generate_password(8, false);
            $status = wp_create_user($username, $random_password, $_POST["email"]);
            $wpse_email_exists = "GOOD";
        }
    }
}

add_action('init', 'manage_my_registration');

As you already pointed out yourself in The Loop, the actual problem with your code from the initial question is, that the code runs twice, when other plugins get the content and parse the shortcode.