You have the Asc function at your disposal. Here is a quick and dirty and rather ugly quick implementation of a "string less than" function.
<!--Saved by Quest 5.5.5173.27901-->
<asl version="550">
<include ref="English.aslx" />
<include ref="Core.aslx" />
<game name="SortTest">
<gameid>235470e7-3e53-4464-ada0-28904679c835</gameid>
<version>1.0</version>
<firstpublished>2014</firstpublished>
<start type="script">
<![CDATA[
msg(StringIsLessThan("a", "b"))
msg(StringIsLessThan("B", "D"))
msg(StringIsLessThan("ab", "adc"))
msg(StringIsLessThan("z", "abc"))
]]>
</start>
</game>
<function name="StringIsLessThan" parameters="s1, s2" type="boolean">
<![CDATA[
len1 = LengthOf(s1)
len2 = LengthOf(s2)
len = len1
if (len > len2) {
len = len2
}
i = 1
done = false
while (i <= len and not done) {
c1 = Asc(Mid(s1, i, 1))
c2 = Asc(Mid(s2, i, 1))
if (c1 < c2) {
done = true
ret = true
} else if (c1 > c2) {
done = true
ret = false
}
i = i + 1
}
if (not done) {
ret = len1 < len2
}
return (ret)
]]>
</function>
<object name="room">
<inherit name="editor_room" />
<object name="player">
<inherit name="editor_object" />
<inherit name="editor_player" />
</object>
</object>
</asl>
It might be helpful as well to explain why you want to sort the keys. There might be a different solution to the same problem. (BTW, I was surprised that direct string comparison doesn't work. I would have bet money on it.)