What happens is that the lineup slot locks when his game starts, so you can’t replace him in the lineup for that night. But you aren’t charged with a game played if he ultimately doesn’t play at all. I believe it functions exactly like baseball: lineup locks when the game starts so you can’t make a substitution, but you don’t get charged with the game start/played unless/until he actually enters the game.
BTW, you can see this is real time on the match-up page if you’re attentive to the games remaining values: you’ll have a game remaining on the lineup slot until the player actually plays, not when the game starts.