There are heuristics for it, though, such as the IsTextUnicode WinAPI function (which is probably not the best thing to use, though). Not every ANSI string is a valid UTF-8 string, so heuristics can help detecting the correct interpretation.
Well, let's not forget that this is under the DSP tab and not the Appearance tab. Sure this is not an argument for not translating the volume setting automatically, but at the same time you can just interpret it as a different DSP function being applied.
Not only, it determines whether the volume (0...100) is scaled logarithmically or linearly. As an example, if the volume is scaled linearly, half volume is at 50 (should make sense), otherwise it's at something like 90% of the volume bar (-6dB).
Well, if it's realtime, you obviously can't look into the future. You could play the track on a decoding channel beforehand and check for silence, then render it again on your encoder, but only up to that point.
Check the "synth" example in the BASS package - this is basically what you want to do, but instead of generating your own tones, you'd feed the rendered VST data into BASS. If you don't need BASS' functionality itself, though, it might be easier to plug your output into BASSASIO directly.
Sure, you could feed the VST's output back into BASS using e.g. DSP functions, I'm sure there are even better ways which I'm not aware of because I haven't used BASS for things like this specifically. Let me tell you that writing a good and stable VST host involves a lot of black magic and head-desking, though.
I never used BASS_VST, so I can't answer that question. If there's any kind of documentation, it might give you some clues. I don't really think that there are any relevant shell plugins apart from WAVES out there, and even those are available as stand-alone plugins, I believe.
Many plugins don't support effGetPlugCategory and will return the default category, but shell plugins like WAVES should. It is entirely possible that plugins crash if you don't call effClose, I'd say that is poor programming but sadly there are so many bad plugins out there that you can't simply ignore it.
Uhm, how about FreeLibrary(library);? That's how you unload dynamically loaded libraries in Windows. Also, you can't "just scan" a plugin, you have to load the completely library and query its VST entry to find out if it's a plugin. WAVES plugins shouldn't be an exception there.