Let $E\to N$ be a vector bundle and $f:M\to N$ be a smooth map. The pullback $f^*:\Omega^k(N,E)\to \Omega^k(M,f^*E)$ is then defined by $$(f^*\omega)_x(v_1,...,v_k)=\omega_{f(x)}((df)_x(v_1),...,(df)_x(v_k))$$ with $x\in M$ and $v_1,...,v_k\in T_xM$.
First question: how can I rewrite this pullback as a map $f^*\omega:\mathfrak{X}(M)\times...\times \mathfrak{X}(M)\to \Gamma(M,f^*E)$? My problem is that $df:\mathfrak{X}(M)\to \mathfrak{X}(N)$ is well defined as long as $f$ is a diffeomorphism. However, $df:\mathfrak{X}(M)\to \Gamma(M,f^*TN)$ is actually well defined.
Then, I know that the connection $f^*\nabla$ on $f^*E\to M$ is uniquely determined by $$(f^*\nabla)(f^*s):=f^*(\nabla(s))\in \Omega^1(M,f^*E)$$
Second question: In some books, I saw the notation $$(f^*\nabla)_X(f^*s)=f^*(\nabla_{df(X)}(s))=\nabla_{df(X)}(s)\circ f$$ but as long as $f$ is not a diffeomorphism $df(X)$ is not a vector field on $N$ so it doesn't make sense writing $\nabla_{df(X)}$. How can I solve this problem?
To write the pullback globally as a map of modules, you need to split the construction into two parts. To make everything less confusing, let me denote by $f^{\star}(E)$ the pullback bundle and denote by $\mathfrak{X}_f(M) = \Gamma(M,f^{\star}(TN))$ vector fields along $f$. Thus, the maps and constructions involving $\star$ have nothing to do with the derivative while the maps involving $*$ include the derivative. Now,
Regarding the second question, the formula $$ f^{*}(\nabla)_{X}(f^{\star}(s)) = \nabla_{df(X)}(s) \circ f $$ is meant to be understood locally as $$ \left( f^{*}(\nabla)_{X}(f^{\star}(s)) \right)|_{p} = \left( \nabla_{df|_{p}(X)}(s) \right) \textrm{ (at }f(p)\textrm{)}.$$ It makes sense even when $f$ is not a diffeomorphism as a connection $\nabla_X(s)$ is tensorial in the $X$ variable. You can also understand the formula globally by splitting the construction of the pullback connection into two parts: