Doesn't have to be "all or nothing" - you can still set and keep registry data - just check for the presense of file at startup time (say 7-Zip.ini) and is it's there read it. Then you can check registry and if it already has your paths, don't touch them :-) - a guy might have real local settings, but if it doesn't write them. You can play with modalities for explicit saving or not. It's just a button :-) but if you provide it you are in "serialization business". On the plus side that means that you are in full control of the format (who wants to change something follows what you wrote instead of guessing).
You could go in the opposite direction of course (read config if registry is empty) but that would be more complex (writing into reg if empty would lock out config file => more flags, config values and "import button" - kind of defeats the purpose of a simple config file to tow around on a USB stick).
No need for a fancy format. Simple plain .ini with dot for hierarchy would do, like:
[FM]
ListMode=0x0303
FullRow=0
PanelPath0=C:\Users\Admin\Downloads\
PanelPath1=
ShowRealFileIcons=1
[FM.Columns]
FSDrives=foo,bar,..,...
FSFolder=foo,bar,..,...
RootFolder=...
[Options]
ContextMenu= 0x80001377
If ints are always hex you can skip 0x of course.
And no need to write things that are really transient or redundant (like Path, Path64 - binary is running - it knows where it is, if it's used by the shell extension then the first run is the one that should be setting them (or when a user OK-s shell extension) == transient == not safe to blindly copy).
Beware that "not installed" doesn't mean "no shell etension" - a guy could have copied the folder from a USB stick => now it's bona fide local binary. I do it with WinRar all the time - call it "happy shell injection" if you like :-) No fuss, just click and paths are in registry.
You can import/export from registry to text file, if you need it.