I like Calculus Made Easy because it uses informal infinitesimals. You can make these fully rigorous if you want and they're a much more intuitive technique than epsilon-delta.
Is it really all that intuitive, though? I mean, where does (dx)^2 = 0 come from?? Usually people say that, well, since dx is already small, then (dx)^2 is really really small, so for magical reasons it's okay to pretend that it's zero. I mean, if we're willy-nilly ignoring small things, why can't we ignore the already "infinitely small" dx?
Personally, I always found hand-waving such an infinitesimal explanation to be much more frustrating than simply building the darn things from pieces I already understand.
One thing that's problematic with this approach is the assumption that dx is a small constant. Its not, it represents a limit, specifically a value approaching 0. Look at the quantity (x + dx)^2. By expanding the terms you get x^2 + 2xdx + dx^2. Look at the last two terms, which both involve a dx. Lets look at how these compare to each other by putting the last term over the middle term so we get (dx^2 / 2xdx). Since we are in a limit, consider the value of this as dx approaches 0. You can cancel one of the dx's so you have (dx / 2x), and now you can clearly see that this limit will be 0. What this last limit shows, is that the last term is infinitely smaller than the middle term as dx shrinks. Which is why it gets "pretended" to be 0 in some math and physics classes. This is no approximation though, and can be carried along in your calculations if you choose to keep it.