How to slice down index.php from a template and import from another file?

You can include other files in the way you’re describing by using get_template_part(), see: http://codex.wordpress.org/Function_Reference/get_template_part. This is intended for sections of code that you intend to reuse elsewhere on the site.

However, if you’re only using these layouts (“list”, “full thumbnail”, etc.) on the home page, then it’s quite fine to put them all in one file (usually front-page.php). But instead of using a counter, you can use the offset option in the loop to style groups of posts differently. For example:

<?php query_posts('showposts=2'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
     <h3><?php the_title(); ?></h3>
     <div class="entry">
          <?php the_content('Read more »'); ?>
     </div>
     Posted on <?php the_time('F jS, Y') ?> in <?php the_category(', '); ?>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

<?php query_posts('showposts=2&offset=1'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
     <h2><?php the_title(); ?></h2>
     Posted on <?php the_time('F jS, Y') ?> in <?php the_category(', '); ?>
<?php endwhile; endif; ?>

Notice the &offset=2. The first loop will grab the first and second posts, the second loop will grab the third and fourth posts.

Another method would be to use one loop, but use a counter to modify the class of the post. For example:

<?php query_posts(); ?>
<?php $counter = 0; ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
     <?php $counter++ ?>
     <?php if ($counter <= 2) $class = "list"
     else if ($counter == 3) $class = "thumbnail";
     else $class = "half"; ?>
     <div id="post-<?php the_ID(); ?>" <?php post_class($class); ?>>
          <h3><?php the_title(); ?></h3>
          <div class="entry">
               <?php the_content('Read more »'); ?>
          </div>
          Posted on <?php the_time('F jS, Y') ?> in <?php the_category(', '); ?>
     </div>
<?php endwhile; endif; ?>