Is it safe to call do_action and apply_filters for built-in hooks?

I think there is a difference here between do_action and apply_filters.

do_action usually triggers a global state change, either output, enqueuing of resource, initialization of modules, and such. This, like anything which infuance global state can result in surprising side effect when used out of context.

apply_filters OTOH behaves much more like a function call, and if written properly should return the same result whenever it is “called”.

Still, the quality of plugins varies (just few hours ago someone asked about a “pro” plugin that uses eval 🙁 ), so your implementation strategy will depend in the end on the coding skills some 5$/hr developer copy pasting snippets he finds around the internet. You will need proper testing against leading plugins to make sure that your code works with at least the leading ones.