It's both. The stock hardware is necessarily limited because all it contains is accelerometers, and cheap ones at that. The fact that it can determine orientation is basically a hack due to the fact that the force of gravity is applying a constant force that when factored out can reliably determine orientation...as long as the remote is stationary. Once it starts moving, the gravitational force is indistinguishable from the acceleration of your motion, and it can really only make very educated guesses at your exact motion...the faster you're moving, the more unreliable. That's where the software comes in. By adding in a delay or lowering the necessity of accuracy the intrinsic crudeness of accelerometers can be somewhat compensated for. The controller is capable of sending *very* precise data, but the more precision you ask for, the less accuracy you get. It's a tradeoff.
When all you're trying to determine is tilt like in Mario kart, it's a simple task and lag isn't necessary. When you're trying to process complex gestures, it falls apart more often than not. The easiest thing to do is just detect fast motion without concern for direction....aka waggle.