The exporting is done to subprocesses started by the shell. So when your bash_profile is run by the login shell all your processes should get the exported variables OK. But in your example you are invoking a new shell to execute the commands in there. When this shell terminates, the values are lost.
I think that's what's happening anyway
To see what I mean do:
% foo=bar
% xterm &
(now try 'echo $foo' in the xterm - no value...)
% export foo
% xterm &
(now try 'echo $foo' again in new xterm, should see the value).