Why use TSubClassOf and not just the class itself?

While I agree with your statement your analogy was the difference between a class and an object, NOT a difference between pointers. While the bowl and recipe are fundamentally different, the device used to find their locations (the pointer) is fundamentally the same. A pointer is a pointer is a pointer. They all perform the same task in fundamentally the same way. The pointer is not changed by what it points at. Imagine I have three signs, one pointing to hot dogs, another pointing to jewelry and the last pointing to a picture of your future fiance. Even though they point to fundamentally different objects, the signs are essentially the same. The hot dog sign may not make sense pointing to the jewelry, but that does NOT make the signs practically or conceptually different. The same is true for pointers.