Yes. You can use setf (documented here) to set the value of all variables, including global ones. For example:
(defparameter foo "foo") ; => FOO
(defun bar () (setf foo 3)) ; => BAR
foo ; => "foo"
(bar) ; => 3
foo ; => 3
The reason your function was not altering the value of foo was because your setf form was setting the value of y rather than foo.
EDIT:
Ah, I think I see what you want to do here. You can use the set function to do this; (setq alpha "beta") is (roughly) equivalent to (set 'alpha "beta"). So, if we change our function to use set, we get:
(defparameter foo "foo")
(defun bar (sym) (set sym 3))
foo ; => "foo"
(bar 'foo)
foo ; => 3
Note that this isn't necessarily setting a global variable, though:
(defparameter baz 1)
(let ((baz 2))
baz ; => 2
(bar 'baz)
baz) ; => 3
baz ; => 1