Yes, the global scope for your plugin persists across invocations of the plugin (until LR exits). So if your code refers to the variable "x", and x is not declared in that scope as a function parameter or with "local", then that "x" is in the global scope and its value persists across invocations of the plugin.
If you are using "strict" to detect undeclared uses of globals, and you want the value of the global "x" to persist across plugin invocations, you can do something like this at the top of the file that "declares" x:
x = rawget (_G, "x") == nil and 1 or rawget (_G, "x")
The first time the file is loaded, the global "x" is assigned 1; on subsequent loads, the current value of "x" is left undisturbed.
Thanks a lot, I didn't knew about rawget and I am using it from now.
I actually tried to use global variable before (without strict) but it wasn't working for one specific reason : the "Reload plug-in on each export" was checked! That also resets the whole plugin every time a plugin menu handler is called. I only noticed that yesterday
Actually, you may also want to look into LrPrefs package - it let you persist the "preferences" for plugin in the form of table.
propertyTable = import 'LrPrefs'.prefsForPlugin()