I also have problems with AutoSize overriding, that's why I've use LocalAutoSize.
You are changing the contol's Width and Height in the Paint method - this looks very risky to me because changing the size normally triggers another paint cycle. Better to do it the Lazarus way: Remove the FAutoSize and the redeclaration of Autosize, just leave "property AutoSize;". Then override the method "CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean)". Here you return in PreferredWidth and PreferredHeight the size that the auto-size control should have. The rest should work automatically.
There is one problem which I noticed looking at the code more carefully: unit LCDLines_char defines the pixel matrix for each character, but does this only for 255 characters. This means: the control is not ready for UTF-8, the Lazarus standard. And in fact scrolling down a bit, I see that the characters #192..#255 are russian cyrillic. I think this is a severe limitation.
To avoid this I had the idea to use the pixel matrix of a rendered font instead of a self-made table, and wrote the attached feasibility project: The text is drawn on a 1-bit bitmap. Then I read the pixels of the bitmap. Each black pixel is drawn as a bright square (or circle) on the destination canvas, each white pixel is the background and is rendered as a dark square. In this demo, reading the bitmap pixels is done by using the Bitmap.Canvas.Pixels[x,y] property which is normally avoided because it's slow, but since the bitmap should not be too small this will not be an issue (it can be optimized, though). Using a ready-made font for rendering the LCD display makes all characters of the font available for the component.
Merging this idea into your component and using some more Lazarus-specific code (AutoSize mentioned above, LCLScaling) makes it sufficiently different from the original so that we can use our own license for it. (As mentioned earlier, I prefer the LGPL with linking exception of the Lazarus-LCL).