I'd be more than happy to help you with this, given that I actually have written a cutscene language for Scenario. It probably still needs a bit of work before it's more useful than JS for cutscenes though. Additionally, I don't think it works in Sphere 1.5 (it uses some SpiderMonkey 1.8+ specific syntax) although that should be easy to fix.
Anyway, I'm happy to talk about this in this thread or over PM if you have suggestions for syntax or whatever.
You can see the source for it here. There's no documentation, but you should be able to figure out the syntax from the parser which is easy enough to read (I can't say the same about the compiler).
Warning: if you do choose to go this route, it's a lot of code. IMO it's worth it, but it will at least double if not triple the size of Scenario. You'll be requiring prospective users to learn a whole new language as well - although if the cutscene language is well-designed this may be easier than learning how to use Scenario through JS.
Regarding Scenario 3.7, I can't really see how Scenario variables are more useful than JS ones since they're set before the scene is run instead of during, which makes them equivalent to regular variables, no? Wouldn't
scene.movePerson('hero', 'north', 5 * GetTileHeight(), 1, true)
.set('heroX', GetPersonX('hero'))
.set('heroY', GetPersonY('hero'))
.panTo(scene.variables.heroX, scene.variables.heroY, 1)
.run();
move to the location of 'hero' before the movePerson()?
If set() accepted a function instead of a value, then it could call the function at scene run time to produce the value. scene.variables could be a function that accepts the name of a variable and returns a function that returns the value of the variable. Other scenelets could then accept that function and get the variable's value. In code,
scene.movePerson('hero', 'north', 5 * GetTileHeight(), 1, true)
.set('heroX', function () { return GetPersonX('hero'); })
.set('heroY', function () { return GetPersonY('hero'); })
.panTo(scene.variables('heroX'), scene.variables('heroY'), 1)
.run();