If you look at InsetCommandParams, you'll see that params_ is set in read(), and the other InsetCommand derived insets call read() when they need to set params_. (When they need to read the params, they just get params_ directly via params() and index into it.) That's what I meant when I said that using [gs]etOptions is an older way of doing this.
I know what you mean. When you have a string, you can use read(Lexer) to set params_. But if you have a InsetCommandParams, setOption is the only way to set params_ of it... maybe I am wrong here. Bo