Sounds normal. The problem is it is quite difficult making an application that runs using two threads to allow one thread to run on one core and another thread to run another core simultaneously. This is because it isn't always possible to divide a task up so that processing can run in parallel. Even when a task can be split over more than one thread, one of threads every so often may need to pause to wait for some data from the other thread, or threads are pausing waiting for the hard disk to fetch or write some data, and this will mean a thread will never show as utilising 100% of any CPU anyway.
It is rare you will see an application use all 4 cores to 100%, typically only CPU stressing programs will do this. Intel know that real world use will hardly ever stress the CPU to 100% across all its core and so a lower rated cooling solution is used.