Eb, though I personally don't see a need for this, I do think it is an interesting idea. Some of the neatest modules come from ingenuity like this.
Any 'team' script already written, including UTeam, would show you a basis for how teams are changed/created/set when players join.
The problem with your idea lies in the fact that many scripts, including UTeam and sui_scoreboard to name but a few, rely on actual teams.
Perhaps you could create your own player object table name to indicate to your script what 'fake' team name they are a part of, so as to not modify the actual 'real' team that might affect various scripts. Though you wouldn't be able to use Source's 'Team' chat to talk to them, it wouldn't be difficult (no, really) to make your own chat prefix.
Though I'm sure it is much more in depth than what you're needing, take a look at our ulx function in chat.lua called cc_asay.
That code shows how we cycle through a table of players, check to see if they have seesasay access (basically, were given access in ULib, they may or may NOT actually be an admin) to see what text is being said after someone types @ blah blah in console.