I think of it like this: If you have a mapping $\alpha: A \to B$, you would like to use it to transfer infrastructure like real-valued functions, vector fields, $k$-forms, etc, between $A$ and $B$. The mapping $\alpha$ already lets you assign to each point $x \in A$ an associated point $y= \alpha(x) \in B$, but you'd like to use it to form associations between functions and more.
The pullback/pushforward catch is that the association does not always run in the same direction. The mapping $\alpha$ takes points in $A$ and maps them to points in $B$, but for functions, the induced association which is the one you gave goes the other way, namely
$\alpha^*: C^{\infty}(B) \to C^{\infty} (A)$
$f \mapsto \alpha^*f$, where the new function $\alpha^*f$ is defined by $(\alpha^*f)(x) \equiv (f \circ \alpha) (x)$.
Because the induced mapping $\alpha^*$ runs in the reverse direction ($B$ to $A$) as $\alpha$ does ($A$ to $B$), it is known as a pullback. It helps to draw a picture. Here is one from Baez and Muniain's wonderful book Gauge Fields, Knots, and Gravity, which I highly recommend for this topic as well as many others. Note that the following correspondence holds between their notation and yours:
Yours $\longleftrightarrow$ Theirs
$A \longleftrightarrow M $
$B \longleftrightarrow N $
$\alpha \longleftrightarrow \varphi $

In the case of vector fields, these can be viewed as directional derivatives in a given direction at each point say of $A$, so a vector $v$ on $A$ should map functions $g$ defined on $A$ to scalars. We can use our already established pullback $\alpha^*$ that maps $C^{\infty}(B)$ to $C^{\infty}(A)$ to define a pushforward of the vector $v$ on $A$ to a vector $\alpha_*v$ on $B$, by
$(\alpha_*v)f \equiv v (\alpha^*f)$
since $v$ (which we already have) eats functions on $A$ to give a scalar, and we've fed it just that ($\alpha^*f$). Whatever scalar it gives, we take to be the result of applying $\alpha_*v$ to $f$.
From here, the recursive definitions continue, alternating between pullbacks and pushforwards. For example, the next step would be to define a pullback for 1-forms from $B$ to $A$ by thinking of them as things that eat vectors and give numbers, and using the pushforward for vectors analogously to how we just used the pullpack for functions in our definition of the pushforward for vectors.