Very good question, I am pretty sure i've figured it out and its a bit disappointing.
I think I know this for version 1.2.1. Also I think there is a bug in the scoring.
You get a fixed amount of points for killing creeps (differs per wave) and for lives left after wave 20 (2000 per life). Besides that you get points for calling a wave early, 250 per wave, going down if you wait longer. However if you call the wave before the previous wave is dead (an the timer for the next wave starts) you don't get any points, I think that is a bug.
One thing I haven't explicitly checked is if you get more points for fast forward, but I am pretty sure you don't.
This sadly enough also means that the absolute max score lies somewhere around 57.500-58.000 points when playing on hard, even when you easily beat all the waves there is no way to get a higher score.
I hope the developers add an infinite waves mode, fix the bugs with sending waves early and allowing 2 waves at the same time and/or add an extra difficulty level. Cause it would easily make me play all levels another 10 times ;)