What set the speed in a cassette tape recorder?

The hubs do not rotate at constant speed in normal tape recorders - there is what is called a capstan that is kept in contact with the tape by a rubber pressure wheel. The capstan rotates at constant speed and so drives the tape at constant speed.

The take-up reel is usually driven through a friction wheel so that it keeps reasonably constant tension on the tape but the hub speed can vary as needed.

Some tape recorders such as ones for voice recording often do drive the tape by rotating the take-up reel at a constant speed - in that case the recording density will change depending upon how much tape is on the reel. The variations in quality for voice are usually acceptable.

The standard for cassettes is where the magnitude of the magnetic flux on the tape represents the instantaneous value of the signal being recorded. There are a couple of techniques used to improve the quality of the signal played back:

1) A high-frequency AC bias is added to the signal being recorded to avoid the non-linearity inherent in the flux recorded vs the current in the recording head, without this there would be a non-linear response around zero. A cheaper alternative where low quality can be tolerated is to use DC bias, that will give a lower signal to noise ratio on playback with more hiss.

2) Another technique is to use equalization where high frequencies are boosted in recording and attenuated on playback to improve the overall signal to noise ratio (i.e. reduce hiss). There are standards set by the RIAA so that tapes are interchangeable between different machines. Some also use noise reduction techniques such as Dolby Noise Reduction.

The motors used for driving the tape were usually brushed DC motors with either a centrifugal governor (a small weight on a spring that open contacts at a defined speed to slow the motor) or by using the back-emf of the motor to sense and control the speed. (See another question I answered DC Motor speed control.)

Stepper motors were never used in conventional cassette recorders. They tend to be inefficient (i.e. consume more battery power), have unsteady speed (e.g. cogging) and are not so easy to drive as DC brushed motors.

In almost all tape recorders (cassette, open reel audio, various video cartridge types, 2" Broadcast videotape, etc...) the tape is driven by a capstan and pinch roller, not by the tension from the take-up reel.

In audio cassette recorders, the takeup reel is probably driven by a friction drive from the capstan motor. In professional open-reel machines, there are often a separate motors to drive the takeup reel and to maintain tension on the supply reel. These motors and their drive systems are designed to maintain a suitable tension on the tape during record/play operation but can produce higher torque for fast forward or rewind operations.

I seem to recall someone (Colecovision?) had a cassette recorder without a capstan, where they dragged tape across heads using fairly precise control of the drive reels.

The drive mechanism was surprisingly naked, with much of the typical guts of a cassette transport just conspicuous in its absence. It was obvious they had reduced production cost considerably.