I would say make an inner package, called STATIC, that
holds all static variables. Then use a renames clause
in each subprogram of the outer package to get a direct
simple name visibility.
Package body Bar is
Package Static is
Foo_V : integer; -- that way we can have other V's
Function Foo return Integer is
V : Integer renames Static.Foo_V;
V := Init_Static;
The only disadvantage I see is that you have to
change the type name in two places (Static, Foo)
if it ever needs to change.