I think you have this correct: padding is only enabled with centered analysis.
The case you're describing would apply padding only to the right side of each frame. While we don't support this automatically through the API, it is still possible to achieve this effect by manually constructing a window that has your desired length and then padding it out to the frame length. Something like:
>>> window = librosa.filters.get_window('hann', win_length, fftbins=True) # use win length here
>>> window = librosa.util.fix_length(window, size=n_fft) # zero-pad out to match n_fft
>>> D = librosa.stft(y, window=window, n_fft=n_fft, hop_length=hop_length, center=False) # non-centered analysis with win_length < n_fft