While what you are planning to do might sound complicated at first, it should be pretty easy to implement. Put something like this into your StoryInit:
<<set $char1 to {
name: "Tom",
location: "start",
}>>
<<set $char2 to {
name: "Linda",
location: "start",
}>>
<<set $char3 to {
name: "James",
location: "start",
}>>
<<set $chars to [$char1 , $char2 , $char3]>>
<<set $player to $char1>>
Then create a widget to allow the swap in a passage with the tag "widget":
<<widget "swap">><<nobr>>
<<for _i to 0; _i lt $chars.length; _i++>>
<<if $player.name == $chars[_i].name>>
<<set $chars[_i].location to passage()>>
<<else>>
<<capture _i>>
<<link "Switch to $chars[_i].name">>
<<set $player.name to $chars[_i].name>>
<<goto $chars[_i].location>>
<</link>>
<</capture>>
<br>
<</if>>
<</for>>
<</nobr>><</widget>>
Now enter the following into the PassageHeader or PassageFooter passage depending on where you want your switch options to appear on every page:
<<swap>>
And that's it.