Haven't actually worked on the converter's code again yet, but have thought about user interaction, like how to specify what parts of a model should ex. have backface culling, where lighting should be enabled, etc. I was thinking, what about using the .obj format's groups for that purpose? More specifically: their names.
As with SO and Model2N64 previously, display lists are created by the converter on a per-group basis, so everything that's part of one group in the .obj file ends up in the same display list. Unlike SO and Model2N64 tho, this is a command line application, so user interaction is limited. Thus, to 1) avoid ridiculously long command lines (say, converter.exe test.obj -g "group name here" "nocull" -g "another group name here" "nocull lighting") and 2) use features already available in the .obj format and thus supported by modelling programs, I think specifying settings such as culling via the names of .obj groups is a good idea.
The way I'm currently planning for this to work is as follows, using SketchUp as the example: You group your model the way you need, then set the name of each group to the properties you want to set, delimited by underscores or spaces, like ex. "nocull lighting" (no quotation marks). Now, you export the model to .obj. SketchUp adds some stuff to the names you gave the groups, so they'll look like "Mesh1 nocull_lighting Model" - note that SketchUp appears to turn most non-alphanumeric characters into underscores, so you could technically say "nocull?lighting" and it'll work. Do use underscores or spaces, tho, also for compatibility with other modelling programs.
When the converter now begins to create a display list from a group, it looks at the group name, splits it at underscores and spaces (so the above example becomes a list of "Mesh1", "nocull", "lighting", "Model"), checks if the resulting strings are known properties (so the list is now "nocull", "lighting"), and then acts on each property by ex. noting that this display list shouldn't have culling enabled.
This might sound complicated, but I think it's pretty intuitive:
Note that this isn't fully implemented yet as it's still in the planning stages. The actual conversion process doesn't yet do anything with the information gathered; that's part of the de-suckification the currently rather hacky code will receive soon.
Underlying, preliminary, experimental code for parameter detection as of now for those who're curious:
Hope that makes sense so far!