Кроме того, есть ли готовая библиотека на JavaScript которая позволяет изменять/добавлять/удалять сущности (предположим значения полей в таблицах) динамически "на лету" через Ajax запрос.
Предполагаю, что такого нет, т.е. задача слишком специфична, это задача на уровне CRM как продукта, а не пакет/библиотека. Js фреймворки могут это упростить, но на их изучение нужно тратить дополнительное время.
Проблемы best practices тяжело обсуждать без Вашего кода или репозитория. В целом нет ничего плохого,чтобы на фронтенде заполнять данные основной и связанной сущностей, а на беке сохранять сначала основную, а следом за ней - связанные сущности с привязкой по id к основной сущности. Чтобы было меньше косяков - нужно продумать логику валидации на фронтенде и бекенде, чтобы зря не сохранять невалидные данные и не давать пользователю фальшпозитивные данные об успешном сохранении или заставлять его переделывать 20 полей после сабмита формы)
Если адекватно распределять бизнес-логику приложения (модели, контроллеры, модули, сервисы, шаблонизаторы на своих местах), то это и можно назвать best practices.