Una vez hice uno para DOS. Para manejar el texto lo mejor me pareció un array unidimensional de punteros a char, donde el único límite que pongo es la cantidad de punteros (cantidad de líneas que puede tener el texto a editar).
Cuando el texto está vacío, tengo todos los punteros en NULL. Siempre mantengo una variable con la cantidad de líneas con texto para saber hasta dónde tengo algo. Para cada nueva línea de texto que se ingresa se asigna la memoria en forma dinámica al puntero que corresponda, de acuerdo a la longitud del texto de la línea. Para insertar o eliminar líneas hay que reasignar unos punteros a otros en el array, nunca copiar líneas de texto.
Es mejor que el array bidimensional en cuanto a que cada línea no utiliza memoria de más. Para evitar la cantidad fija de punteros se podría usar una lista enlazada, pero eso impediría el acceso directo con subíndice a cualquier elemento (línea). No se si se justifica usar realloc() para cambiar dinámicamente la cantidad de punteros.
¿Estás programando para interfaz de caracteres o GUI? En el primer caso, a la scrollbar simplemente hay que programarla. Si es con mouse, debería ser algo como la del editor del Turbo C. Dependiendo de en qué parte de la barra uno cliquea, es la operación que se ejecuta; se establece la nueva posición del botoncito y se redibuja la barra. Creo que yo me ocuparía primero de programar la funcionalidad del scroll (subir o bajar por línea o página) y luego la barra en sí. Si vas a contemplar la posibilidad de que se arrastre el botoncito con el mouse, la cantidad de líneas a escrolar se calcula con respecto a la proporción que ocupa el botoncito en la barra, aplicada a la cantidad de líneas del texto.
G