Assuming proper discontinuity means that for all $x \in X$ there is an open set $U$ containing $x$ such that $gU \cap U \neq \emptyset$ implies $g = e.$
If $G$ were finite, we'd use the fact that $X$ is hausdorf and $gx \neq x$ for $g \neq e.$ In this case, there are open sets $U_g, V_g$ with $x \in U_g, gx \in V_g$ and $U_g \cap V_g = \emptyset.$ Then since $G$ acts continuously, $g^{-1} (V_g) \cap U_g$ is a neighborhood of $x.$ To get our final neighborhood, intersect these. Since $G$ finite, this is again a neighborhood.
But sadly $G$ is only discrete, with proper action. So we need to restrict somehow to only finitely many $g \in G.$ Here's the idea:
Let $U \ni x$ be contained in a compact set $C.$ Choose $U_g$ and $V_g$ as before, except we replace $U_g$ with $U \cap U_g.$ So $U_g \subset C$ for all $g.$ Since $G$ acts properly, we have that the preimage of $C \times C$ is compact in $G \times X.$ Since $G$ is discrete, the sets $(g, X)$ are open, and they form an open cover of any subset of $G \times X.$ By compactness, there are finitely many $g_i$ such that $(g_i, y)$ is mapped into $C \times C.$ Since this open cover is disjoint, these are the only $g_i$ that send any point in $C$ back into $C.$ In particular, this implies there are finitely many $g \in G$ such that $gU \cap U \neq \emptyset.$
Then I claim $W =\cap_i^n U_{g_i}$ is a neighborhood of $x$ that's disjoint from $gW$ for all nontrivial $g.$ By definition, this is true for $g$ one of the $g_i.$ If $g$ is not one of the $g_i,$ then since $g(U) \cap U = \emptyset$ and $W \subset U$ we have $g(W) \cap W = \emptyset.$ Exactly as desired.