I think I understand…
The best way to approach it is that a rackspace is a ‘sound’. If for a part in a song you need controller 1 playing some soft-synths and controller 2 playing it’s onboard synth then you make a rackspace that has all the controller 1 synth plugins in it and nothing ‘attached’ to controller 2. The combination of these is your ‘sound’ for song part 1. Then assign this to sing part 1.
Song part 2 needs both controllers playing soft synths - controller 1 is using the same synths as song part 1 but controller 2 is using some different ones so I would just add those synths in to the same rackspace as song part 1 above but make a variation where for song part 1 the controller 2 synths are bypassed and for song part 2 they are not. So rackspace one becomes 2 variations; each is the ‘sound’ for song parts 1 and 2.
For part 3 you’d make a new rackspace with the new synth plugins as required.
The other option is two instances; it shouldnt realistically take up any more processing power or RAM than running all the synths in one rackspace - if they are active they are taking up processing power/RAM wherever they are held! This then gives more flexibility to have totally different rackspaces per controller but you’ll just need to work out a way of switching parts in each instance (totally doable, just depends how you want to do it)