My initial thought is to use something like low variables to set up one or more “channel entries” variables for the different types of content to display on the frontpage. How you’d set this up, and the logic of how you output the content in the right places would largely depend on the actual requirements, but let’s keep it simple and say that the editor selects 15+ entries, and that the order of them should determine where they go.
So, say you want the first one to go into a large block at the top, then the next three in columns below that, then two semi-big blocks below that, and then the rest as a list of some sort. Here’s a quick sketch of what the template would look like:
{exp:channel:entries entry_id="{lv_frontpage_items}" fixed_order="{lv_frontpage_items}" dynamic="no" limit="1"}
<div class="large-block">{title}</div>
{/exp:channel:entries}
{exp:channel:entries entry_id="{lv_frontpage_items}" fixed_order="{lv_frontpage_items}" dynamic="no" limit="3" offset="1"}
<div class="three-column-block">{title}</div>
{/exp:channel:entries}
{exp:channel:entries entry_id="{lv_frontpage_items}" fixed_order="{lv_frontpage_items}" dynamic="no" limit="2" offset="4"}
<div class="two-column-block">{title}</div>
{/exp:channel:entries}
{exp:channel:entries entry_id="{lv_frontpage_items}" fixed_order="{lv_frontpage_items}" dynamic="no" offset="6"}
<div class="list-item">{title}</div>
{/exp:channel:entries}
{lv_frontpage_items} is a “channel entries” low variable (could also be Playa, but Channel Entries comes with LV), and has to be early parsed for this to work. You could of course make several different variables for different types of content, add statuses for some things, etc. As I said, depends on the actual case.
But, to program this into the future is maybe not possible if you go this route. For that I think I instead would have made a new channel named “Frontpage layout” or something, that the editor could post to. I’d use custom fields the same way as in Low Variables (but would have to use Playa), and then get the newest entry from that channel, excluding future entries, and output much the same way as above. This way the editor can make new entries and set them to a future date, and as soon as that date is reached, that entry will be used to generate the frontpage.
Don’t know how much of that made sense, but.. 😊 Hope some of it can get you on the right track.