You can do something like Mike's example, but you need to remember that the sympy expr is contained in the expr attribute of the unit object:
In [1]: q = yt.YTQuantity(3, 'g/cm**2/s')
In [2]: q.units.expr.atoms()
Out[2]: {-2, -1, cm, g, s}
In [3]: srepr(q.units.expr)
Out[3]: "Mul(Pow(Symbol('cm'), Integer(-2)), Symbol('g'), Pow(Symbol('s'), Integer(-1)))"
In [4]: q.units.expr.args
Out[4]: (g, cm**(-2), 1/s)
The unit object itself is actually (a little embarrassingly) a sympy expression, but a trivial one that doesn't actually contain any unit information. Admittedly this is not the best for discoverability of what's going on under the hood, but making it a class that inherits from object will require a bit of work and refactoring.
Note that if you want to transform these sympy subexpressions into unit objects, you'll need to pass them through the Unit() constructor. See e.g. the __mul__ or __div__ function definitions in the Unit class definition (in yt/units/unit_object.py).
Hope that helps,
Nathan