How can this multiple loop have pagination as described?

First off, to me it looks like the first loop just grabs the first posts of post type tip of the day, and then the second loop grabs the rest minus the first, so unless I am misunderstanding the function of your loops, I would just do 1 loop, check if it is the first iteration, if so, grab the separate data for the first post, then on all other iterations grab the data you need for the rest. Also as a double security measure, when checking if its the first iteration of the loop, also check to make sure it is not paged, i.e. it is on the first page of results, not page 2, 3 etc. That should just be a simple check of $wp_query->is_paged

DISCLAIMER: Upon reaching basically the end of writing this long
answer, I realized that it pretty much will not work because filtering
into pre_get_posts affects all queries including the get_posts()
function. I decided to leave the full answer as some of its
information may help you and possibly editing it around a little bit
can solver your issue. However I believe what I wrote above is the
simplest solution unless I misunderstand your intentions completely.

However, I will assume you need two seperate loops for other reasons, so on to my answer. I didnt test any of this so you’ll have to test it out and see if it works, but the issue is that you are using offest, which will break pagination. WordPress suggests that you have to handle pagination manually. http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination

Also im going to assume that the second loop that only has posts per page = 1 is that you just want the first post on the archive to be that type etc.

First lets solve the pagination issue with offset following wordpress advice (modified for you).

add_action('pre_get_posts', 'myprefix_query_offset', 1 );
function myprefix_query_offset(&$query) {

    // Before anything else, make sure this is the right page...
    // Assuming this is a page. if its an archive, etc. choose the correct conditional
    // tag
    if ( ! is_page('totd') ) {
        return;
    }

    //First, define your desired offset...
    $offset = 1;

    //Next, determine how many posts per page you want 
    $ppp = 10;

    //Next, detect and handle pagination...
    if ( $query->is_paged ) {

        //Manually determine page query offset (offset + current page (minus one) x posts per page)
        $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );

        //Apply adjust page offset
        $query->set('offset', $page_offset );

    }
    else {

        //This is the first page. Just use the offset...
        $query->set('offset',$offset);

    }
}

Next wordpress tells us to modify the found posts variable since it doesnt take into account your offset

add_filter('found_posts', 'myprefix_adjust_offset_pagination', 1, 2 );
function myprefix_adjust_offset_pagination($found_posts, $query) {

    //Define our offset again...
    $offset = 1;

    // make sure this is the right page...
    // Assuming this is a page. if its an archive, etc. choose the correct conditional
    // tag
    if ( is_page('totd') ) {
        //Reduce WordPress's found_posts count by the offset... 
        return $found_posts - $offset;
    }
}

Now im pretty sure that since pre_get_posts fires for every posts query, and we are checking if its the totd page, it would fire for both you’re loops, so what I would do is now filter into the_posts and just insert that post into front of the $posts array.

function myprefix_add_first_post($posts){
    global $wp_query;

    // make sure this is the right page...
    // Assuming this is a page. if its an archive, etc. choose the correct conditional
    // tag, as well as make sure we are not on page 2, 3 etc of pagination
    if(!is_admin() && is_page('totd') && !($wp_query->is_paged)){
        $query_args = array(
                'post_type'      => 'tipoftheday',
                'orderby'        => 'date',
                'posts_per_page' => '1',

            );
        $first_post = get_posts($query_args);
        $all_posts = array_unshift($posts, $first_post[0])
        return $all_posts;
    }
    else{
        return $posts;
    }
}
add_filter('the_posts', 'myprefix_add_first_post', 1);

This should grab the first post and throw it in. You will still have to check for the first iteration of your loop and style it accordingly. (WARNING: as disclaimer claimed at top, pre_get_posts will still filter the get_posts(), so the above will probably not work without further editing.)