There are a number of ways to go about this, with some tasks easier one way or another. Kind of like if you have a geometry problem, and it can be trivial if you use angles in classical geometry, or inversely much simpler if you solve equations analytically.
The two main techniques are:
1- Trigger-based actions
2- Event loop
(technically (1) might use an event loop, but it would be an internal DCS one that we don't have access to)
TRIGGER-BASED ACTIONS
Those are easily done via the Mission Editor, as you said. The standard techniques are:
A- Zone-based triggers and other stuff that you set up in the trigger menu
B- Anything in a group's advanced waypoint conditions
This includes dealing with flags, which you set somewhere and use as trigger conditions somewhere else. It also works very well when you want to get a group to do something at or after a certain time, or when it enters/exits a zone.
EVENT LOOP
This is the more "advanced" technique, which is closer to the analytical geometry thing. Here you say "well I can run scripts, why don't I make an event loop in my script and check every x seconds what's going on? I can then precisely do things with my own variables, etc..."
An event loop generally functions better when you want to use a custom F10 menu since generally you'll have one in your code anyway: you constantly need to update the F10 menu to make it contextual to the situation you're in.
In your specific case, you need a detailed contextual F10 menu, coupled with precise knowledge of what's going on. So I suggest going the event loop route.
Every time you hit the F10 menu item, it triggers a specific function. That function can respond based in random or deterministic fashion, and set a condition for future success (you can use flags and/or lua variables for that).
Say for example you hit F10 to land. The requestLanding() function chooses between 50% full stop and 50% go landing. If it selects full stop, it will message you and then schedule a 1-second timer on a function that checks your helicopter speed and ground altitude. That function will succeed if you are at 0/0 for say 3 seconds, and fail if you exceed 120 seconds from calling the function.
Anyway, it's basic event management in code, and you just have to figure out within the DCS api what info you need to monitor to succeed/fail in the tasks that you want.
Finally, you can mix and match both techniques by using flags. In your code you use:
trigger.action.setUserFlag(200, 3) -- this sets flag 200 to value 3
trigger.misc.getUserFlag(200) -- this returns 3
As long as you use flags with numbers, you can use them also in the Mission Editor.