You don’t have to normalize vectors, but it makes a lot of equations a little simpler when you do. It could also make API’s smaller: any form of standardization has the potential to reduce the number of functions necessary.
Here’s a simple example. Suppose you want to find the angle between two vectors u and v. If they are unit vectors, the angle is just arccos(uv). If they’re not unit vectors, the angle is arccos(uv/(|u| |v|)). In that case, you end up computing the norms of u and v anyway.