Without images, that's a tough one.
Best bet: Place a second textarea with identical settings (font size, line height, padding...) but different styling (no background color, no borders) to the left of your original textarea. Make it read only, take it out of the tab rotation (tabindex=99999
might do the trick or simply disabling it), and put line numbers in it. This should work well and correctly as far as I can think, it should even survive things like the client resizing the font manually in their browser.
You could even use position: relative
and a big padding-left:
value in the original textarea to move the counter textarea into the original one.
Downside: The line counter won't follow vertical scrolling of the textarea. See the comments below.