I understand that motors come with recommended speed controllers, be it encoders or esc. But what is the difference between the two?
If you are talking about an encoder that would be used on a motor, an encoder is the device that encodes the position of the motor into a particular format, so used to determine the exact physical position of the motor at any one time, where as an ESC or Electronic Speed Controller is used to actually drive the motor to a different speed.
Generally speaking, the ESC would be used to make the motor turn and the encoder would be used to tell you what position the motor is in. Some ESC's have a sort of inbuilt encoder that detects what phase angle the motor is in so it can control the motor effectively, this is usually used on brushless DC motors.
Hope this helps.
ESC can use back EMF or encoder to know the speed of motor, they can balance current to keep torque or speed constant. I you are going to use a BLDC motor I suggest using VESC, is a very good esc, opensource and lots of people use it.