How do you tell Craft to change post directions from row-to-row?
You could do multiple "for" loops on the first craft.entries request using limits and offsets:

{% set posts = craft.entries.section('posts') %}

{# ROW ONE #}
{% for post in posts.limit(1) %}
   html stuff for first post
{% endfor %}

{% for post in posts.limit(2).offset(1) %}
   html stuff for 2nd and 3rd posts skipping 1
{% endfor %}

{# ROW TWO #}
{% for post in posts.limit(2).offset(3) %}
   html stuff for 4th and 5th posts skipping 3
{% endfor %}


etc.

For the switching back and forth between horizontal and vertical, you can set up a couple of macros and call them where needed(or includes for that matter, lots of ways to skin this cat).

{% macro vertical(url, title) %}
&lt;li&gt;
    &lt;a href="{{ url }}" title="{{ title }}"&gt;{{ title }}&lt;/a&gt;
&lt;/li&gt;
{% endmacro %}

{% macro horizontal(url, title) %}{# different html #}
&lt;div&gt;
    &lt;h1&gt;{{ title }}&lt;/h1&gt;
    &lt;a href="{{ url }}"&gt;Learn More&lt;/a&gt;
&lt;/div&gt;
{% endmacro %}


and then where you need them in the first part of your question above:

{% for post in posts.limit(2).offset(3) %}
   {{ _self.vertical(post.url, post.title) }}
{% endfor %}


and

{% for post in posts.limit(2).offset(3) %}
   {{ _self.horizontal(post.url, post.title) }}
{% endfor %}


Twig Macros

Using Macros by Mijingo

alternatively with includes

{% for post in posts.limit(2).offset(1) %}
  {% include "_includes/vertical_layout" %}
{% endfor %}