Can I avoid an undo when operator is called due to a property change?
Operators automatically push their actions containing the properties used onto the undo/redo stack, by calling an operator with different options you are adding it to the stack each time.

To prevent calling the operator each time an option changes you could move the properties for the options to outside of the operator, maybe to an AddonPreferences instance? This can then be accessed by the operator and a panel or directly in the User Preferences when enabling the addon. See Cloud Generator addon for an example of properties added to bpy.types.Scene and used by both panel and operator.

You could also try having the operator take a single argument as a string (comma separated list you can split?), a CollectionProperty or BoolVectorProperty, which I think would integrate better with the undo stack. A panel displaying the operators options could then combine the options into one property to be passed to the operator call.

Having said that, you may also find that calling the operator with defaults and only allowing the user to change options within the Redo Last to be a workable solution. See the sapling addon and it's large array of options only available in the redo last. Also the space tree addon in contrib has a similarly large list of options. You can adjust properties in the redo last panel, see the results and only have one undo step.