The combination of the two features you're asking for - displaying past text in a different colour, and stopping the user changing their choice - are in combination known as "
readback", to distinguish from "
rollback" which makes it really as if you'd gone back in time.
Readback is controversial. PyTom has always had major philosophical objections to it (you can see some of his posts about it
here). Despite that, he implemented a version of it back in 2005 for Ren'Py 4.7, and a few people used it in games, including me in
When I Rule The World. There turned out to be significant bugs in that implementation, and
readback mode was plagued with bugs for as long as it was supported. Some of the people who requested it in the first place, such as me, became convinced over time that PyTom's opinion actually made sense, and so as the problems with that module became apparent and the core Ren'Py code changed to become incompatible with it, support was dropped.
That thread includes a comparison saying that
readback is a bit like shooting a film in black-and-white. Colour is better technically and provides a richer user experience, but some creators might prefer to provide things in black-and-white.
I think there's something to that comparison, but you should think very hard before trying to ban
rollback in favour of
readback. In particular, consider:
* Are you banning saving and loading games? If not, then the player could just save her game before or at every branch. They're going through more hassle and fiddly interaction with the game menu to achieve the same thing
rollback provides for free.
* If you are banning saving and loading games, are you banning restarting the game, skip mode, and reinstalling it?
* What kind of players are you imagining this decision is for?
** There are players who'll play straight through even when
rollback is available, and won't be affected at all. They might step back to reread some text they missed due to an accidental double-click, but they won't change their decisions.
** There are players who want to see both ways a branch can go, for whatever reason. If you're banning
rollback in favour of
readback, but allowing saving and loading, then all you're doing is making things more fiddly for these users: either they have to go in and out of the game menu (breaking immersion) to play in their desired style, or they have to go back to the start of the game and skip through back to that choice.
Displaying rollback text in a different style is possible, I think.
This page suggests that specifying a Ren'Py style for "style.say_dialogue['rollback']" will let you change the colour of rolled-back text (and you can replace "say_dialogue" with any other style chosen from your shift-D Style Hierarchy).
If, after consideration of all these things, you still want to use
readback, then there's a
readback module available
here which apparently works in Ren'Py 6.7. Give it a try and see if it works for you.