In the second paragraph of Hatcher's proof, fourth sentence, it says The uniqueness part of (a) implies $\tilde f_0 = \tilde \omega_m$ and $\tilde f_1 = \tilde \omega_n$.
How does the uniqueness part of (a) imply this? If $f_0=\omega_m$ and $f_1=\omega_n$, why is it not automatic that $\tilde f_0 = \tilde \omega_m$ and $\tilde f_1 = \tilde \omega_n$?
Also, what exactly does that second paragraph show?

It is 'automatic' by (a). What is not automatic is that $\tilde{\omega}_n(1) = \tilde{\omega}_m(1)$, hence that $n = m$.
To show this, you use the fact that a homotopy lifts to a homotopy. In particular, since $f_t(1)$ is a constant path in $t$, its lifting $\tilde{f}_t(1)$ is still constant in $t$. Then you are done: $$\tilde{\omega}_n(1) = \tilde{f}_0(1) = \tilde{f}_1(1) = \tilde{\omega}_m(1).$$
In the first paragraph he shows that to any loop of $(S^1, x_0)$ we can associate an integer. In the second paragraph he is showing that this number does not depend on the homotopy class of the path. With this he builds the (now well defined) function $$\pi_1(S^1, x_0) \to \mathbb{Z}$$ which is going to be an isomorphism.