Thanks a lot for the reply @elliot. As you can probably tell from the length of the post, my eyes started bleeding thinking through it. Going to start building it again in earnest tomorrow.
Shortcodes for inner content differences is (suddenly!) obvious and brilliant. Thank you!