There is an experimental Innerblocks feature (__experimentalTemplateOptions) that Im not sure if also affects the post template.
In any case I think this won’t solve your issue which is that you want the layout to change even after an initial selection of template. What happens in this scenario is that the editor might have the blocks with user entered content or even extra blocks. So changing the template might replace these. Considering that, a way to update the current blocks with a new template could be:
Update the editor settings with the new template value
wp.data.dispatch("core/block-editor").updateSettings({ template:new_template })
then synchronize the template
wp.data.dispatch("core/block-editor").synchronizeTemplate()
If you check the reducer case for SYNCHRONIZE_TEMPLATE
the above is actually the same as doing:
const blocks = wp.data.select("core/block-editor").getBlocks();
const updatedBlockList = wp.blocks.synchronizeBlocksWithTemplate( blocks, new_template );
wp.dispatch("core/block-editor").resetBlocks( updatedBlockList );
I haven’t tested the code but I think the parameters passed are correct. Hope this points you to solve the problem.