Adjust the order for returned posts

In order to accomplish what you desire, you’ll have to fetch the posts ahead of time. There is no way to specify in SQL an arbitrary ordering given an ID list.

query_posts() creates another main query, throwing out the main query. Since you’re doing this anyway, you can use get_posts() to return a list of posts instead.

$posts = get_posts( array(
    'post_type' => 'page',
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'post__in' => (array) get_option('henrik_feat_pages'),
    'showposts' => (int) $featured_num
) );

Then,

$posts_by_id = array(); 
foreach( $posts as $post ) $posts_by_id[$post->ID] = $post;

Now you have an array of post objects indexed by ID, and you can iterate through your ordered list and select the posts from that list:

global $post;
foreach( (array) get_option( 'henrik_feat_pages' ) as $post_id ) {
    $post = $posts_by_id[$post_id];
    setup_postdata( $post )

    // ... Template code as if you were in the loop.
}

Update

The loop above replaces the main loop. So instead of writing

<?php if (have_posts()) : while (have_posts()) : the_post();
    <?php /** Code in loop **/ ?>
<?php endwhile; endif; ?>

To initiate the loop, we use:

global $post;
foreach( (array) get_option( 'henrik_feat_pages' ) as $post_id ) {
    $post = $posts_by_id[$post_id];
    setup_postdata( $post );

    /** Code in loop **/
}

This is equivalent code that uses a slightly different syntax. $post must be globalized and set to the correct post object on each iteration, and setup_postdata() populates all of the related post variables with the information found in $post.

This code assumes that the option henrik_feat_pages is an ordered list of post IDs.

Update 2

How to show a specific post with a known post ID, $first_post_id first:

// Create ordered array of posts to show, with $first_post_id first
$posts_to_show = array_merge( (array) $first_post_id, (array) get_option( 'henrik_feat_pages' ) );

// Get the pages whose IDs are in $posts_to_show
$posts = get_posts( array(
    'post_type' => 'page',
    'post__in' => $posts_to_show
) );

// Create ordered post array:
$posts_by_id = array(); 
foreach( $posts as $post ) $posts_by_id[$post->ID] = $post;

// Output loop:
global $post;
foreach( $posts_to_show as $post_id ) {
    $post = $posts_by_id[$post_id];
    setup_postdata( $post )

    // ... Template code as if you were in the loop.
}

Note that I simplified the query in get_posts() so that only the post_type and post__in arguments are supplied. There is no need to specify ordering, since the posts are being ordered in code.