Using drupal_goto for checkout redirection to add $_GET variable, but gets overwritten
drupal_goto should work just fine. You can confirm (e.g with Firebug) that it does the initial redirect to where you want (including foo=bar).
Then you'll see a second redirect to the plain URL which is being performed by another code/module that you haven't told us about.