Modify Post Status Arguments

You can alter a post status after init by changing the global variable $wp_post_statusses:

function alt_post_status() {
    global $wp_post_statuses;

    $wp_post_statuses['custom_status']->public = true;
}

add_action( 'init', 'alt_post_status' );

register_post_status() (line 922) does the same thing:

...

global $wp_post_statuses;

if (!is_array($wp_post_statuses))
    $wp_post_statuses = array();

// Args prefixed with an underscore are reserved for internal use.
$defaults = array(
    'label' => false,
    'label_count' => false,
    'exclude_from_search' => null,
    '_builtin' => false,
    'public' => null,
    'internal' => null,
    'protected' => null,
    'private' => null,
    'publicly_queryable' => null,
    'show_in_admin_status_list' => null,
    'show_in_admin_all_list' => null,
);
$args = wp_parse_args($args, $defaults);
$args = (object) $args;

...

$wp_post_statuses[$post_status] = $args;

...