There is a sort-of invisible frame around characters of a font. The frame measures from the lowest portion of characters that dip below the baseline (like p and j) up higher than the tops of the capitol letters to accommodate diacritic marks like umlauts and accents. Since most characters don't go all the way to the highest ascender or down to the lowest decender, it can appear that text isn't centered between two vertical points.
If you need the text to be centered exactly, you can cheat it by applying baseline shift, but keep in mind that if you change the text, you may have to tweak the amount of baseline shift again. You can either apply baseline shift to the text itself, or edit the text frame options and change the Baseline Options. Also, in your screenshot, I see that you have rounded corners on your text frame. Vertical justification only works on rectangular text frames, so that's why that isn't working.