Adding virtual methods is indeed clumsy. However the visitor pattern is a viable option is nothing else works out. I'm not too familiar with Csympy's type system. Could you tell me more about it? I can see that the derived classes return a number corresponding to the class. By the look of it, it should be fast.
A Series class will definitely make manipulation of series much easier, so that the sum, product, etc of two series' returns another series. I think it is a better idea than the current implementation in Sympy.