Currently this is the behaviour.
If you ask AWB to lookup in {{foobar}} to make some replacements, and {{foobar}} is nested inside {{barfoo}}, those changes will not be made. To do that, you need to tell to look in both {{barfoo}} AND {{foobar}}, which can create situations where {{barfoo}} happens to have some text that matches what is in {{foobar}}.
E.g. if ask AWB to find/replace X->Y in {{foobar}}, in a situation like this
{{barfoo |1=X |2={{foobar|X}} }}
You get no change. If you ask AWB to find/replace X->Y in {{foobar}} and {{barfoo}}, in the same situation, you will end up with
{{barfoo |1=Y |2={{foobar|Y}} }}
Now I believe it is possible to have a nested logic (in {{barfoo}} > in {{foobar}}, find/replace X->Y) to only replace the X in {{foobar}}, but this is extremely tedious to set up. For instance if you are doing replacement inside infoboxes, you'll need to set up this logic for *each infobox*. If you have 3rd-level, 4th-level nesting situations, then this quickly becomes even more nightmarish.
AWB's behaviour should be tweaked to look at the deepest nesting level e.g. (look in {{foobar}}, no matter how deeply nested it is). Or at least make this sort of "deep" lookup easily doable.