Addon land is all considered insecure.
When you do:
Code:
local func = ZO_Func
ZO_Func becomes insecure. And then any functions called from within ZO_Func (and any called within those) will be considered insecure for that call.
ZO_PreHook has always been the correct way because it doesn't move ZO_Func into addon land.