This loop cannot run because the variable newMap is being read from and written to in arbitrary locations as the loop progresses. This is order-dependent behaviour, and parfor disallows that.
So far as I can tell, you're using newMap as a cache to avoid recomputing fun_foo for rows of x that you've already seen. It might therefore work to ensure that you run your parfor loop over only the unique rows of x. Something like this:
x = randi(5, 100, 3);
fun_foo = @sum;
[xu, ~, ic] = unique(x, 'rows');
parfor i=1:size(xu, 1)
fos_u(i,1) = fun_foo(xu(i,:));
fos = fos_u(ic);