Any terrain that restricts ranged attacks also stops movement (for 2 move units). Hills or forests that can prevent ranged units for attacking two hexes away also means that melee units have to stop adjacent to the "range ball" and take a volley of attacks before inflicting damage. Hills can remove the line of sight problem for ranged units allowing them to make full use of their range while melee units are slowed down.
Lakes and water limit melee's movement but do not hinder ranged attacks. Mountains block movement and ranged attacks but losing 1 hex out of 6 possible attack locations (for melee) hurts more than losing 1 hex out of 18 possible attack locations (for ranged).
It is much easier for ranged units to focus fire and bring down units than it is for melee units to. There are 18 hexes from which a ranged 2 unit can attack a target. There are only 6 hexes from which a melee unit can attack a target.
If two pikemen get attacks off and kill a composite, it is unlikely that either of the pikes will survive the counter attack. The result is a 2 for 1 trade.
What true for one unit vs one unit is not necessarily true for ten units vs ten units. Spacing and frontage are non-factors in one vs one but become much more relevant at larger unit counts.
Really the smart way to fight is to mix melee and ranged, and use the melee for what melee is for: controlling the battlefield. Not actually attacking with them unless you've a good reason.
A big army of sknekts backed up by a few archers can tear apart a range ball.
Close them in on the outside so the wounded can't retreat. Stick sknekts between them so they can't maneuver, then use your smaller archer army to pick them off one by one.
Basically your sknekts hold them, and your archers and horses punch them while they're helpless.