I think I almost got it, just need to fix alignment issues now. I changed:
Line 235 in NGUIText.GetGlyphif (dynamicFont.GetCharacterInfo ((char) ch, out mTempChar, Mathf.RoundToInt (finalSize * screenMultiplier), fontStyle))
Line 258 in NGUIText.GetGlyphfloat pd = fontScale * pixelDensity / screenMultiplier;

I think I need to alter Update in the beginning, but adding multiplier into baseline variable is not entirely fixing it, so I might be missing someplace else.
_________________
Edit: Still a bit wrong, but it's very close. Am I altering the right place in this baseline calculation?
float y0 = mTempChar.vert.yMax;
float y1 = mTempChar.vert.yMin;
baseline = Mathf.Round (y0 + (finalSize - y0 + y1) * 0.5f * screenMultiplier);

Both y0 and y1 are not changed when GetGlyph encounters non-1 screenMultiplier, so it's unlikely I need to multiply those by anything. Multiplying finalSize doesn't look right either, as well as multiplying the whole thing before rounding. I'm probably overlooking something.
_________________
Edit 2: Or maybe baseline is alright all along and I should only alter something else in the GetGlyph method. For example, adding this comes extremely close to the desired result:
Line 246 in NGUIText.GetGlyphglyph.v0.y = (mTempChar.vert.yMax - baseline) * screenMultiplier;

Except the result seems to deviate undesirably between glyphs, breaking proper vertical alignment. Ugh.

_________________
Edit 3: Ugh, so close yet wrong again!
Line 246 in NGUIText.GetGlyphglyph.v0.y = (mTempChar.vert.yMax - baseline) * screenMultiplier;
glyph.v1.y = (glyph.v0.y - mTempChar.vert.height) / screenMultiplier;

Letter U no longer sinks, but now O fails to raise above other quads like it does in properly aligned x1 scaling. What the hell am I missing?
_________________
Edit 4: Okay, I'm starting to have a suspicion I have missed an already present pixel density correction that's right under my nose. Never saw the existing pixel density parameter in NGUIText be anything other than 1, but figuring out where it's assigned might be the right way to approach the issue instead of tinkering with delicate stuff in NGUIText.
_________________
Edit 5: Christ, that's completely right!

I forgot that I bypassed the way standard UIRoot DPI adjustment works, which is why labels never received any notice about changed density, - as the property of UIRoot they were reading was not changed by screen density logic anymore. Very simple fix.
Line 1792 in UILabelif (rt != null) NGUIText.pixelDensity = (rt != null) ? 1f / screenMultiplier : 1f;