Re-order posts in query after

Given that meta is cached inside page load it should be reasonably performant to do it like this (not tested):

usort( $wp_query->posts, function ( $post_a, $post_b ) {
    $a = get_post_meta( $post_a->id, 'key', true );
    $b = get_post_meta( $post_b->id, 'key', true );
    if ( $a == $b ) {
        return 0;
    }
    return ( $a < $b ) ? - 1 : 1;
} );

It might be more reasonable to modify query inputs before it’s run though, as per comment.