Personally, I don't think using $SESSION bothers me all that much since it's a built-in super-global for PHP and thus is always available and a well understood aspect of PHP. (I.e.: any time you see $SESSION if a piece of code, you know where it's coming from.)
One issue I would have with passing the $SESSION data into an object is: what happens if another object alters the session data? If the first class needs to know about this, then you'll need to pass the $SESSION array by reference to each. Also, will you need to add a mechanism to write the data back to $SESSION? If so, how do you make sure multiple objects using $SESSION data don't overwrite each other's data in the wrong sequence?
One possible compromise might be to use some sort of singleton class that loads the session data in its constructor, and has a __sleep() method that saves its session data back to the $_SESSION array. Then you could either pass that object or instantiate it within each class that needs it.