The spy role could just be like the TF2 spy (as you said) and let you transform to someone else whenever you want instead of having to kill someone to change to their color. That would also make matches much more interesting as you could change your color to someone who everybody knows is innocent. And also, all these roles could be in like a role selection screen, so, like that new game “Enemy On Board”, once you enter a match you already have a designated role: either crewmate or impostor, but as an impostor or crewmate you can choose between different characters and “races” (for impostors). So it could work almost or exactly like that: you enter a match and you’re given the role of either crewmate or impostor but you get to decide which role you want (with the limits that you already said to each role so if someone locks up, for example, detective everybody else has detective restricted as there’s already someone who’s chosen it).
edit:rewrote the first part because I felt I didn’t quite expressed myself well and wrote the second paragraph about the roles and a “role selection system”.