I just want to say one word to you, just one word. Variables. Okay, two words really. Story variables.
If you want to allow multiple choices which all lead to the same passage, then you should probably use a story variable, rather than abusing the story history as you are. Checking the history is great when you want to know if the player has been to a specific passage under normal gameplay conditions, however, you should not be attempting to shoehorn every bit of state you can into the history. That's not what it's there for and, as you've noticed, it's cumbersome and awkward.
Anyway. In some cases you might want to use a separate variable for each choice at a decision gate, while in others you could simply use one for all choices.
For example, if Grag had a choice to peek on one of three ladies at the onsen (naughty, Grag) then you would only need one variable in the Outdoor Onsen passage:
/* Using <<link>> macros. */
<<link [[Specific Character Path Main choice]]>>
<<set $onsenGragPeekedAt to "Hursag">>
<</link>>
<<link [[Specific Character Path Main choice]]>>
<<set $onsenGragPeekedAt to "Zola">>
<</link>>
<<link [[Specific Character Path Main choice]]>>
<<set $onsenGragPeekedAt to "Nimashet">>
<</link>>
/* Using setter links. */
[[Specific Character Path Main choice][$onsenGragPeekedAt to "Hursag"]]
[[Specific Character Path Main choice][$onsenGragPeekedAt to "Zola"]]
[[Specific Character Path Main choice][$onsenGragPeekedAt to "Nimashet"]]
And checking its value later:
/* Using <<if>> macro. */
<<if $onsenGragPeekedAt is "Hursag">>
Peeked at Hursag content.
<<elseif $onsenGragPeekedAt is "Zola">>
Peeked at Zola content.
<<elseif $onsenGragPeekedAt is "Nimashet">>
Peeked at Nimashet content.
<</if>>
/* Using <<switch>> macro. */
<<switch $onsenGragPeekedAt>>
<<case "Hursag">>
Peeked at Hursag content.
<<case "Zola">>
Peeked at Zola content.
<<case "Nimashet">>
Peeked at Nimashet content.
<</switch>>