I'm not a programmer but as I understand it for the program not to utilize the processor to the max it has to be coded that way or its waiting. Waiting for a time interval, waiting for data to load, waiting on user, waiting for an event or other trigger...
So if you have a program that fully loaded into ram and that only uses 50% cpu I would have to guess that its coded not to use more (ie - its allowing other programs to get some cpu time) so it will probably still use 50% cpu but finish quicker on the OC'd system.