div contenteditable или textarea?
По второму:
<textarea onkeyup="this.style.height = 'auto'; this.style.height = this.scrollHeight + 'px'"></textarea>

Сброс высоты на auto нужен для получения реальной высоты. Если бы не было этого сброса, то высота оставалась бы на своем максимальном значении (например, если удалить строку).
По поводу второго, как вариант, попробуйте JS'ом считать кол-во переносов строк (\n) и в зависимости от них менять высоту. Может получится.