So I hope you're convinced that a directional derivative *should* satisfy the product rule. In that case, it's fine to postulate that a directional derivative must satisfy the product rule. The question then is: Why do we assume the Leibniz rule (+linearity) and nothing else? I would suggest the answer is simply that it gives you the correct result. The set of such functionals has dimension equal to the dimension of the manifold, so you can be confident that you don't have too many. Here's a different definition of the tangent space that I find more intuitive. If you have a point $P$ on your manifold $M$ and a smooth curve $\gamma:\mathbb{R} \to M$ such that $\gamma(0)=P$, then this curve defines a functional on functions around $P$. I.e., if $f:M \to \mathbb{R}$ is smooth, then we get $f \circ \gamma:\mathbb{R} \to \mathbb{R}$, and we can differentiate this function to get a number, which we denote $r_\gamma(f)$. We can then define the tangent space to be the set of linear functionals from smooth functions on $M$ in a neighborhood of $P$ that arise from smooth paths, as above. Notice that this purposely is not the set of paths; two paths give rise to the same functional iff they're tangent to each other. This is an equally valid way of defining the tangent space. The reason the Leibniz rule suffices is then the fact that every functional that satisfies the Leibniz rule actually arises as the directional derivative with respect to some smooth path. In fact, you can ignore functionals entirely. You can define the tangent space to be the set of smooth paths through $P$ modulo the following equivalence relation. Two paths are equivalent if in some coordinate patch around $P$, they have the same tangent vector (in the classical sense). Note that this is independent of coordinate path, so it's well-defined, and two paths are equivalent in the sense I just described iff the define the same functional on the space of smooth functions on $M$, so this is the same as the tangent space I described above. The only reason we cannot just take tangent vectors in some coordinate patch is that this is not coordinate-independent, whereas these equivalence classes of paths are.