The NameMapping engine does not work in reverse... hence you can't say "using this Child, make sure it belongs to a particular parent". This is why required children works because it finds a child object by the properties then checks to see if it has the required children. The engine works it's way from the lowest ancester (Sys) up to the child object by finding each child based upon properties.
The problem you described above is really no problem at all. After your first drag from A to B, call Page.RefreshMappingInfo to clear the internal cache of the mapped objects and then call your drag from B to A. The mapping can stay as you described above, it's just a matter of clearing the internal cache of TestComplete so that it can find the objects according to the appropriate hierarchy again.