Not sure why I need to explain this but anyway ...
I will add the obvious in context comment: a hash algorithm is so extremely likely to be able to be implemented at least an order of magnitude faster in GPU that it's pointless making the statement without a specific example of why it cannot be done.
I already explained this. Simply take something that a CPU does better than a GPU (for example, accessing large amounts of memory) and put it at the center of your hashing algorithm.
The order of magnitude faster is because of the massively parallel possibility since each hash is unrelated to the other and can run almost completely independently.
Except the memory access is not independent. Alternatively, you simply include large numbers of decisions in the hashing algorithm, which slows GPUs down.
A single hash is slower in a GPU than in a CPU, but when you can run 128 (or more) of them at the same time ... unless the CPU is 128 (or more) times faster at doing a single hash than a GPU then of course the GPU will be faster.
You simply use a hashing algorithm that won't parallellize effectively. For example, if the hashing algorithms "expands" the block header up to 128MB before it compresses it down to the 256-bit output, trying to run 128 of these at once on a GPU will just massively bottleneck at the memory controller.
If you use a hashing operation that consists of an expand/mix/compress mechanism in such a way that the 'expand' and 'hash' steps need to access a large amount of memory (say, 128MB) and the 'mix' step requires lots of decisions (say, testing bits to decide which entries in the 128MB expanded table to XOR or swap), GPUs will absolutely suck at the hashing operation.
In the case of doing a repeated hash - the point is that you are doing a reasonably straight forward list of commands to a set of data and spitting out the result - which is not like writing a complete program to do all sorts of different things to achieve it's result.
Much time is spent on getting that one function (hash) correct and fast - also very unlike normal coding.
As I said, it is not difficult to design a hash function that runs very, very poorly on a GPU. You simply use the operations that CPUs do well (make decisions, access large amounts of memory) and avoid the operations GPUs do well (long chains of pure computation on small amounts of data with no decisions).
A hashing algorithm can do anything at all, so long as it's deterministic. You could, for example, do a standard SHA-256 and then also do something massive and crazy (but totally unlike SHA-256), XOR the result of that massive, crazy thing with the SHA-256 result, and still preserve all of the cryptographic properties of the hash. It is not difficult to make that massive, crazy part something GPUs do poorly.