\expandafter stores exactly one token. So the expansion order is \expandafter-\expandafter-\a.
After this everything is restored and \detokenize is executed.
This is the reason why you sometimes see crazy successions of \expandafter: To reverse the expansion order of n tokens you basically need 2^n-1 \expandafters. At least you don't need \expandafter before \detokenize because it will initiate expansion looking for its argument.
So
\detokenize\expandafter\expandafter\expandafter{\expandafter\a\b}
gives the expansion order you need: \expandafter-\expandafter-\expandafter-\b. After restoring there is
\detokenize\expandafter{\a BBB}
finally yielding the desired output.
In case your're interested in always fully expanding the contents of {} (whatever they are), you can't (in general). Depending on a concrete context, there may be alternatives. So if this answer is not what you were looking for, please elaborate.
\expandafterjumps over one token, expands once the following one (if it's expandable, otherwise nothing happens) and vanishes. – egreg Jun 09 '12 at 09:20\expandnextfrometextools, which in your case could be used as\expandnext\detokenize\a\b. – dgs Jun 09 '12 at 10:41