I actually never figured out the story justification, but in terms of the engine; enemies between maps are completely different. While there are some shared assets, a large majority of the sounds, models, textures etc are specific to each map. It'd be too costly to make friendly variations (and you would need new textures, because otherwise they'd be too easy to confuse with the enemy ones). The Flood make an interesting variation, since they temporarily aide you before going back to being enemies in one level.
I don't really think it would've been too costly for Bungie to create friendly variations for some of the levels, especially when they do so regularly throughout all the games (Sentinels are friendly/non-friendly in every game, brutes/jackals/drones become hostile in Halo 2, and then the Flood become friendly for a while in Halo 3).
And whenever an enemy becomes friendly (or vice-versa) there's never a new texture change, instead their AI changes, their reticule changes and they appear differently on the radar.
The only reasons in terms of development is to do with how players will respond and how it will affect level design.
It would be confusing for players if there were both friendly and hostile grunts in the same level, especially if they were to fight each other in the various big battle scenes in Halo 3.
And were they to have no grunts/hunters on the Covenant side it would mean that there would be fewer enemy types to fight against. There would be no mini-bosses, which the hunters act as, and there would be no easy cannon-fodder, which grunts perform (jackals would be possible, but take the fun out given their shields and the general benefit of using precision weapons on them)
It would have been nice however to see at least one grunt or hunter working with the UNSC, perhaps in a cutscene or two.
Especially as it's proven in other canon that there were even some Brutes who rebelled against the Covenant, as well as some Elites who kept with the Covenant.