Решение вроде-бы ничего. Я пробовал так делать. Написал наследника mx:TaxtArea, в нем поставил сэттеры на textOffset, в которых я делаю

Код AS1/AS2:
_textOffset = value;
setStyle("paddingLeft", value);
setStyle("paddingRight", value);
далее переопределил метод updateDisplayList

Код AS1/AS2:
override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
var vm:EdgeMetrics = viewMetrics;
textField.move(vm.left - _textOffset, vm.top);
//increase viewMetrics width by textOffset*2
var w:Number = unscaledWidth - vm.left - vm.right + _textOffset*2;
var h:Number = unscaledHeight - vm.top - vm.bottom;
// If there's a border, add another line of pixels to the textField
// that go under the border but allow for descenders on some fonts.
if (vm.top + vm.bottom > 0)
h++;
// maxScrollV doesnt get proper value if width < 4
textField.setActualSize(Math.max(4, w), Math.max(4, h));
}
Еще нужно не забыть про

Код AS1/AS2:
textField.ignorePadding = false;
По большому счету этот метод на 90% дублирует метод updateDisplayList в mx:TextArea кроме маленькой особенности: двигается textField на величину паддинга для того, чтоб визуально начало строки было там где и положено ему быть.
В таком случае текст не обрезается, но фактически сам textField получается больше области, в которой отображается текст и в итоге кликабельная область становится шире. Хотелось бы, конечно, чтоб те клики, которые визуально попадают за граничу TextArea не ловились этим компонентом. Т.е. структура, типа:

Код AS1/AS2:
<s:Group>
<s:BorderContainer/>
<local:AdvancedTextArea/>
</s:Group>
s:BorderContainer ловил клики если пользователь кликнул рядом с текстом (но попал в зону паддинга).