Rather than storing the names of story variables (or entire property chains) so you may obliquely reference them later, why don't you simply store the results there. It would also likely help to simplify your data structure setup as well, say by making $quests an object. For example:
/* Initialize $quests as an object. */
<<set $quests to {}>>
/* Add quest objects to $quests. */
<<set $quests["HolyGrail"] to {
name : "HolyGrail",
start : "startGrail",
complete : false
}>>
/* In play, when the hero gets the Grail. */
<<set $quests["HolyGrail"].complete to true>>
/* Checking the quest's status at any point (both cases). */
<<if $quests["HolyGrail"].complete>>
Hero has the Grail and cannot start the quest.
<<else>>
Hero does not have the Grail and can start the quest.
<</if>>
/* Checking the quest's status at any point (true only). */
<<if $quests["HolyGrail"].complete>>
Hero has the Grail and cannot start the quest.
<</if>>
/* Checking the quest's status at any point (false only). */
<<if not $quests["HolyGrail"].complete>>
Hero does not have the Grail and can start the quest.
<</if>>
That said, if you want to persist with the mess you have now, then State.getVar() static method can do what you want. For example:
<<if State.getVar("$" + $quests[0].two[0])>>
Hero does not have the Grail and can start the quest.
<<else>>
Hero has the Grail and cannot start the quest.
<</if>>
Since you're using a boolean there, there's no good reason to compare it to another. Simply initialize $hero.hasGrail to false and set it to true when the player completes the quest.