В вопросе ответ: flex-grow. Но судя по постановке вопроса, у тебя с этим плохо, так как ничего сверхсложного и некрасивого в этом нет.
В качестве альтернативы можно использовать calc(100vh - [headerheight])
, которое необходимо модифицировать под существующие условия, но корректно будет работать только, если шапка фиксированная, в противном случае необходимо задействовать JS.
И чем дальше, чем хуже относительно максимально корректной реализации на флексах.