I would say: yes, it totally can. But it is less convenient and you have to manage more callbacks yourself. I posted examples of this which you can find by searching (can’t show now, I’m on a phone.)
And, for example if you store engine name in a param, you will have to read that / use fallback at the top of the script before setting engine.name
Also, kinda obviously, your script can’t make parameters that map directly to engine commands, nor use engine utility libraries to do so (e.g. passerby.lua or whatever)
Instead you will have to make abstract parameters and map them to engine xommand on the fly.
Finally, since there is not a standard interface for e.g. voice management of polyphonic engines, you may need actually different logic to control stuff.
Like dan says, were thinkign about how to make these steps more convenient. But I can put together an “inconvenient” example with a real script (meadowphysics, say) when I get a moment.