This is admittedly complicated, but has the advantage that the input is the plain character.
\documentclass{article}
\usepackage{graphicx,newunicodechar}
\usepackage{fontspec}
\setsansfont{Josefin Sans}
\makeatletter
%% flip the caron
\def\fakehacekchar{\smash{\raisebox{\depth}{\scalebox{1}[-1]{\char"5E}}}}
%% define a "fake accent command"
\def\fakehacek#1{%
\leavevmode\vbox{\baselineskip\z@skip \lineskip\z@skip
\ialign{\hfil##\hfil\cr\fakehacekchar\cr#1\cr}}}
%% check if we have to use the fake háček
\ExplSyntaxOn
\cs_new_protected:Npn \makefakehacek #1 #2
{
\tl_if_in:VnTF \f@family {JosefinSans} {\fakehacek{#1}} { #2 }
}
\cs_generate_variant:Nn \tl_if_in:nnTF { V }
\ExplSyntaxOff
\makeatother
\newunicodechar{Ž}{\makefakehacek{Z}{Ž}}
\newunicodechar{ž}{\makefakehacek{z}{ž}}
\begin{document}
Žž\textsf{ZzŽžZz}
\end{document}
If I had the choice, Josefine Sans wouldn't be in my book. :)

With a change to \fakehacekchar
it may be more appealing: the scale factors in the x and y directions are different:
\def\fakehacekchar{\smash{\raisebox{\depth}{\scalebox{1.2}[-.8]{\char"5E}}}}
Here's the result:

How to get the fake háček:
I flip vertically a caron: \scalebox{1}[-1}{\char"5E}
The above operation will send the caron deep down the baseline, so I raise it to sit on the baseline: \raise{\depth}{...}
Finally I make its dimensions zero, so that it would not influence the typesetting decisions: \smash{...}
How to superimpose the fake háček to a character:
I build a box consisting of an alignment where the accent sits exactly on top of the character, centered on it. The \leavevmode
is needed in case a paragraph starts with this accented character.
Inside the box I set no baseline skip and no line skip, so the two boxes consisting of the accent and the character will sit on one another without any vertical separation.
The alignment is obtained with a low level analogue to tabular
with a c
column.
The macro \makefakehacek
checks whether the current font family is JosefinSans; in this case it does \fakehacek{#1}
else it does #2
. So, calling \fakehacek{Z}{Ž}
the correct typesetting will be done.
Final step: tell XeLaTeX that we want Ž
to be interpreted as \fakehacek{Z}{Ž}
and this is a job for \newunicodechar
.
The second example uses a different fake háček, built as above but with
\scalebox{1.2}[-.8]{\char"5E}}}
that expands the caron by 20% in the horizontal direction (1.2), compresses it by 20% in the vertical direction and flips it vertically because the scale is negative (-.8).