Unfortunately, I don’t really see an automated approach to this, aside from the “brute-force” approach of setting a brickwall limiter into your output path and simply slamming it. Yes, that will equalize all your levels, but at the expense of dynamics and sound quality (plus, it will introduce significant latency for the brickwall look-ahead).
I can only recommend to create all your songs against a fixed reference level either via a metering plugin or against a reference track (maybe a simple drums / bass track to add your keys to?). I’d actually recommend doing both; first a rough “numerical” calibration against a fixed VU level (I’m using Klanghelms VUMT for that) or LUFS if you want to get more sophisticated (Klangfreund LUFS is nice for that). But both approaches don’t fully take perceived loudness into account, when it comes to individual instruments instead of mixes. I encounter this when e.g. matching a Rhodes sound against an acoustic piano: even though both measure at the same LUFS / VU level, the Rhodes (less brilliant overtones) doesn’t appear as loud as the acoustic piano. Same with a clean guitar patch against my piano. That’s why I after rough VU calibration, I usually give the sounds a trial run against a backing track and further tune levels.