It turns out that I was not entirely right, the most general lemma (corresponding to firstn_app) for take and ++ is:
take n (l ++ k) = take n l ++ take (n - length l) k
The existing take_app_ge : take .. = l ++ take .. really needs the length inequality as a side-condition, but can be derived from the most general lemma above.
The merge request !517 (merged)!518 (merged) uses take_app and drop_app for the most general lemmas (without side-conditions), and derives other lemmas from it.