The problem with your attempt is that both # and ## in your expression are interpreted as both being arguments to the pure function that you're feeding as the second argument to Select. To nest Functions like this, you have to take one of them and use the non-short-hand version:
Map[Select[{1, 4, 3, 9}, Function[{x}, Mod[x, 3] == #]] &, {0, 1, 2}]
More cleanly, I would just use Table:
Table[Select[{1, 4, 3, 9}, Mod[#, 3] == k &], {k, {0, 1, 2}}]
But really, in this case, I think it's better to use Cases or Pick, because you can select the elements using Patterns rather than truth-value Functions, reserving the pure function for the Mapping over {0, 1, 2}:
Cases[{1, 4, 3, 9}, a_ /; Mod[a, 3] == #] & /@ {0, 1, 2}
Pick[{1, 4, 3, 9}, Mod[{1, 4, 3, 9}, 3], #] & /@ {0, 1, 2}
To elaborate on why the version in the OP doesn't work, we can note that their code is essentially equivalent to
Map[Select[{1, 4, 3, 9}, Function[{x}, Mod[x, 3] == x]] &, {0, 1, 2}]
In other words, in each case, the elements of {0, 1, 2} are irrelevant, and the function is just checking if Mod[x, 3] == x is True for each of {1, 4, 3, 9}, and 1 is the only one that works.
LookupandPositionIndexreturns{{3, 4}, {1, 2}, {}}... – unlikely Mar 05 '16 at 20:56