Generating combinations of specific values of a nested dict
For non-trivial list comprehensions such as

multi_config_flat = { key[:-1] + (key[-1][6:],) : value for key, value in flat.items() if key[-1][:5]=='multi'}


You should split it onto multiple lines, i.e.

multi_config_flat = {key[:-1] + (key[-1][6:],): value
                     for key, value in flat.items()
                     if key[-1][:5]=='multi'}


This:

key[-1][:5]=='multi'


should be

key[-1].startswith('multi')


This:

if len(multi_config_flat) == 0: return


is equivalent (more or less) to

if not multi_config_flat:
    return


The latter also catches the case of multi_config_flat being None, but that won't be possible in this context.

This:

for key, _ in multi_config_flat.items():


is not necessary; simply iterate over keys:

for key in multi_config_flat:


This is fairly opaque:

reduce(operator.getitem, setting[:-1], config)[setting[-1]] = value


Probably you should assign the output of reduce to a meaningfully named variable, so that your code is more clear.