There's a counter variable that I use to keep track of how many times the main game loop iterates in one second. Usually it's well over 60 fps. But large graphics -- planets and capital ships -- are what really cause performance to take a hit.
To fix this, I will have some code along these lines:
IF fps > 60 THEN
SpawnNextEnemy
ELSE
IncreaseAttributeOfExistingEnemy (make enemy go faster, etc)
END IF
But like you mentioned, I have also experimented with hard limits on enemies:
IF NumberOfActiveCapitalShips > 2 THEN
IncreaseAttributeOfExistingEnemy
ELSE
SpawnAnotherCapitalShip
END IF
Both ways get the job done and they can even be combined.