Let's look at the definition of the set $S = \{ x : f_x \not = h\}$. There are two ways that a given $f_x$ could differ from $h$:
1) For some $n$, $f_x(n) \downarrow \not = h(n)$
2) $f_x(n) \uparrow$ for all $n$.
In the former case, we would be able to find a "witness" $n$ by simulating the execution of $f_x$ on all inputs. But, in the latter case, it seems as if we will never be able to tell, in a finite amount of time, that $f_x$ will never be defined. We can use this insight to show that $S$ is not computable.
Let $A$ be some co-r.e. but not r.e. set, e.g. the complement of the halting problem. Let $h$ be any total computable function, e.g. the constant zero function.
For each $n$, define a function $F(n)$ that does the following. It ignores its input $j$. It just simulates the enumeration of $A^c$. If it finds that $n \in A^c$ then it immediately halts and returns 0 (that is, it returns $h(j)$). Thus $n \in A^c$ if and only if $F(n) = h$; if $n \in A$ then $F(n)(j)$ is undefined for all $j$. Moreover, there is a computable function $p$ that, given $n$, produces an index $p(n)$ for $F(n)$.
Now, for each $n$, $n \in A^c$ if and only if $f_{p(n)} = h$. Thus
$n \in A$ if and only if $f_{p(n)} \not = h$, which happens if and only if $p(n) \in S$. If $S$ is an r.e. set then we can enumerate the set of number of the form $p(n)$ that are in $S$, which means we enumerate $A$: if $S$ is r.e. then so is $A$. But that is impossible by the choice of $A$.
This is an example of a sort of "parity switch" argument, which is a useful technique. The proof shows that if $S$ was r.e., we could use that to "switch the parity" of an arbitrary co-r.e. set to r.e. That isn't possible in general, so $S$ can't be r.e. You can see the roots of the parity switch in item (2): $S$ has to "do something" (enumerate $x$) if and only if $f_x$ does not "do something" (halt on at least one input). That sort of situation often lays the foundations for this type of argument.