В некоторых веб приложениях есть возможность добавлять поля. Как это сделано?
В большинстве случаев с помощью EAV сделано.
Чаще всего используется EAV. Если речь не о сервисе которым пользуется множество клиентов, можно добавлять реальные колонки к таблице.
Как же можно использовать документоориентированную БД, например MongoDB.
Современные РСУБД поддерживают JSON поля и операции над ними. А в Postgres есть индексируемое поле JSONB. С его помощью можно совместить преимущества классических реляционных баз, и простоту NoSQL. При этом оно ещё и очень быстро работает за счёт индексов.