Subtle. One clear difference is that a scheduled stop of the bus would always be "halten": "Der Bus hält am Bahnhof" (= this service includes a stop at the train station). If the bus has to stop for a moment because of the traffic etc, it is typically "anhalten". But in many cases the two verbs could be exchanged, like in your examples, the difference is subtle at best.
Specifically, with cars, "halten" is a technical term in the German traffic rules, like parking but for a shorter duration. In this comparison, I think, "anhalten" always focuses on the transition, from flowing traffic to "come to a halt". "Halten" alone can also be static, in the sense of parking, so it can be used when a car is standing somewhere. (Saying to a driver: "Bitte halte kurz hier vor der Einfahrt, ich bin gleich wieder da")
So, as a tentative summary, "anhalten" seems to have the more specific word meaning (in the sense of come to a halt), while "halten" is more general and allows a number of different readings, -- therefore "halten" is also the one that develops some very specific senses for specific contexts (just because it is otherwise too general...).