@agentzero
I'm not an expert on this, but I have already made something like this before. One way you can define possibilities of routes is to make an array of points, describing the routes a car can go through (possibly an array of 2d or 3d points describing the path over the streets). After having all paths described you can pick random paths, or random cycles inside these paths (where the end of the path is the same point as the start), and someway make the car go through this path indefinitely. This paths can also have their own properties, like the maximum speed, maximum number of cars, etc, and you can use this to control traffic behaviour. About spawning/dispawning cars, you may spawn and dispawn cars at a point far away from your car/camera, and at a point your camera can't see (for example, in the opposite direction of the forward vector of your camera).