Obfuscators (the good ones) DO change the control flow. In fact, you have to specify which functions to skip because it slows performance on your tightly looped functions.
I do think that untill we're using built-in processor encryption, anything done to curb cracking is viewed as a call to a challenge more than a hinderance. The point of obfuscation is to keep your code closed-source not to protect it from cracks.