There is an TBGRABitmap.AveragePixel property that computes the average color taking into account transparency.
Then there is TBGRAPixel.Lightness that returns the a weighted sum of R/G/B taking as a linear value.
There isn't a straightforward multiply function though you could use BlendRect function for some adjustments with blend operations like boMultiply, boSvgSoftLight, boSoftLight, boHardLight.
About light balance, you could convert first your image into XYZ colorspace and then back to RGB but with a different reference white. To do so, you can for example create a TXYZABitmap of the same size as original image, call SetReferenceWhite with the target illuminant, do TXYZA.PutImage of the BGRA image, then call SetReferenceWhite with the original illuminant, then do TBGRABitmap.PutImage of the XYZA image.
That's not the most memory efficient way, but you get the idea. To use less memory, you can do that for each scanline into an array of colors, using the conversion function of the colorspaces. Thinking about it, that could be a new function to add to BGRABitmap.