Your feeling is correct, Turbine does not allow any file IO other than .plugindata files. While this is an annoyance to legitimate plugins, it was implemented to prevent plugins from acquiring external information in real time which could be used for less than legitimate purposes. You are also correct that it is possible to work around it by using the re-load mechanism.
You can read from multiple files as long as they exist within an available scope - you can't read from a file created by a different character that was saved with Character scope - so be sure to save your data with the appropriate scope. It is also possible to load specific .lua files on the fly if multiple versions of code exist and you don't know until runtime which version to use - I've been using this technique to cut down on loaded data for a couple of plugins. You just have to remember that dynamically loaded .lua files will use variables that are locally scoped if you aren't careful.
FWIW, I would suggest using Vindar's wrapper solution to avoid issues with UTF-8 characters. I would also suggest using my euroNormalize function to avoid issues with decimal numeric data. This will eliminate issues for users that use DE/FR clients as well as those that switch between EN and DE/FR clients.
if (tonumber("1,000")==1) then