I will answer my own question. You will need to read through the original question as to why this is an answer - essentially what it comes down to is the right tool for the job. I was trying to solve my problem using Susy mixins (initially), however turning to Susy functions helped get me most of the way to a solution.
The final part is to write my own function to return the right value that I needed for the nth-child(2) div, it needs a margin-right to push it back into position the correct amount. Copying the internals of the Susy pre mixin was the obvious course of action here, and it worked, hooray!
@function elf-margin-value(
$span,
$columns
) {
$this: $span, $columns;
$value: if(index($this, outer), $this, append($this, outer));
@return span($value);
}
So in my code I can use it like this:
margin-right: elf-margin-value(4, 12);
Minor issue - I know what index and append are doing, but not I'm not quite sure about outer.
Not the place to discuss but I wonder if this abstraction would be good for Susy Next, rather than baking this same/similar logic into several mixins. I would benefit at least :)
Anyway this is how I solved this for now, I am still very interested to hear if Eric has some advice for this and if my solution can be done easier/better.
The solution thus far is the following:
$to: to($flow);
.region {
&:first-child {
@include span(8 omega of 12);
}
&:nth-child(2) {
margin-#{$to}: elf-margin-value(4, 12);
width: span(4);
float: $to;
clear: $to;
}
&:nth-child(3) {
margin-#{$to}: - span(8);
width: span(4);
float: $to;
}
&:last-child {
width: span(4);
}
}