To be honest, I am not entirely sure why $\tilde{X}$ path-connected and $X$ locally path connected are assumed here. It seems like $\tilde{X}$ being connected is sufficient.
As you said, it is sufficient to show that $\tilde{H}_1$ is constant. Now note that since $f \circ \tilde{H}_1 = x_0$ is constant, we have that the image of $\tilde{H}_1$ is contained in the fiber of $x_0$ under the map $f$. But since $f$ is a covering map, this fiber is discrete and since $\tilde{X}$ is connected, the map needs to map into one connected component i.e. $\tilde{H}_1$ is constant.
You're correct that you can talk about inverses without assuming that your paths are loops. Let me introduce some notation to clarify this. For $a, b \in X$ I will denote $p: a \longrightarrow b$ to mean that $p$ is a path starting at $a$ and ending at $b$. Given a path $p: a \longrightarrow b$, I will also denote its homotopy class as $[p]$. More specifically, to say $[p] = [q]$ I mean that there is a homotopy $H: I^2 \longrightarrow X$ such that $H(0, s) = p(s)$, $H(1, s) = q(s)$ for all $s$ and such that $H$ fixes the endpoints, so $H(t, 0) = a$ and $H(t, 1) = b$ for all $t$. This fixed endpoint condition means that for all $t$, the path $s \mapsto H(t, s)$ is a path $a \longrightarrow b$. Thus, it is well defined to say that $[p] : a \longrightarrow b$, as the fixed endpoint condition means that if $[p] = [q]$ then $q$ has the same endpoints $a \longrightarrow b$.
With that jargon aside, the point is that if we have paths $p: a \longrightarrow b$, $q: b \longrightarrow c$ then we can concatenate them to get $p*q: a \longrightarrow c$. We can also define the reverse path $p^{-1}: b \longrightarrow a$. Notably, concatenation is well defined on homotopy classes! That is, we can define the product $[p] * [q]$ as $[p * q]$ and have it be well defined. For $a \in X$, we will also denote $c_a: a \longrightarrow a$ as the constant path at $a$.
Now, with all of these definitions set up, we can prove that $[p] * [p^{-1}] = [c_a]$ for $p: a \longrightarrow b$. And we need not insist $a = b$ at all for this statement to make sense. The construction here is exactly as you mentioned for loops. As $[p] * [p^{-1}] = [p * p^{-1}]$ we are trying to show that $p * p^{-1}$ and $c_a$ are homotopic with fixed endpoints. Here, of course, $p * p^{-1} : a \longrightarrow b \longrightarrow a$ and $c_a: a \longrightarrow a$ so $a \longrightarrow a$ are our endpoints. For $t \in [0, 1]$, we will denote $p_t = p|_{[0, t]}$. Then $p_t: a \longrightarrow p(t)$. We also have its reverse $p_t^{-1} : p(t) \longrightarrow a$. Then we are claiming that $H(t, s) = (p_t * p_t^{-1})(s)$ is a homotopy between $p * p^{-1}$ and $c_a$ which fixes the endpoints $a \longrightarrow a$. Certainly, $H(0, s) = p_0 * p_0^{-1}(s) = c_a(s)$ and $H(1, s) = p_1 * p_1^{-1}(s) = p * p^{-1}(s)$. Furthermore, for any $t$, the path $s \mapsto H(t, s)$ is the path $p_t * p_t^{-1}: a \longrightarrow a$. Thus, $H$ does indeed fix endpoints so $H$ witnesses $[p * p^{-1}] = [c_a]$. Again, note that we never needed the fact that $a = b$. If you're interested more in this idea of paths as "maps" $a \longrightarrow b$, you could look into the fundamental groupoid. It is essentially the object I defined here consisting of things like $[p]: a \longrightarrow b$. Restricting this "fundamental groupoid" to only consider loops $[p]: a \longrightarrow a$ yields the fundamental group.
To answer your second question, certainly it is the case that the "shrunken" $p * p^{-1}$ are all completely different maps. Here, I wrote them as $p_t * p_t^{-1}$. However, they all have the same endpoints $a \longrightarrow a$ and essentially, the map $t \mapsto p_t * p_t^{-1}$ is a continuous family of loops at $a$, i.e. a homotopy.
Best Answer
You are trying to show that any two maps to $X$ are homotopic. The argument: we can join $f(x)$ and $g(x)$ by a path, and then move along these paths for every $x$ to create the homotopy. There are two problems: there may not be a unique path. OK, so you need to make a choice. Now, you are arguing: I can choose for every $x$, $y$ in $X$ a path from $x$ to $y$ in a continuous way. That again may not work.