I think any oddities in pricing needs to be handled by rules in the pricing object.
As far as a different SKUs based on different attributes, I think internally, each should be saved as a separate product. So the attributes would be saved as a associative array
'size' => 'large',
'color' => 'red',
);
If you had the same SKU for different options, the array would look like
$attributes = array(
'size' => array('small', 'medium', 'large'),
'color' => array('red', 'blue', 'green'),
);
The actual attributes would most likely be objects, so you could have additional information about them, but you get the idea.
From an interface perspective, it would probably be convenient to let people build new products off of similar products.