Daniel,
Sorry I missed your request.
I want to know why you use Im[(x + yI)^2 + 1] + 8)/16 to scale the value to [0,1]? why not use Im[(x + yI)^2 + 1] /8 directly?
The Hue function ranges from 0 to 1 but your data ranges from -8 to 8 so you need to both scale and offset the function to get a full range of hues in the plot. Dividing by 8 gives you a range of -1 to 1. Dividing by 16 gives you a range of -0.5 to 0.5 and we shift it by 0.5 (8/16) to go from 0 to 1.
By the way, could you please provide the code for scaling the bar?
Plot3D[Re[fun^2 + 1], {x, -2, 2}, {y, -2, 2},
ColorFunction -> Function[{x, y, z}, myHue[Im[(x + y*I)^2 + 1]]],
ColorFunctionScaling -> False,
PlotLegends -> BarLegend[{myHue[#] &, {-8, 8}}]]
Regards,
Neil