The explanations have been given; the workaround is, in Plain TeX,
\vglue <glue specification>
This is interesting in this respect, because it shows how to avoid
that the glue is discarded at the top of a page.
\def\vglue{\afterassignment\vgl@\skip@=}
\def\vgl@{\par \dimen@\prevdepth \hrule height\z@
\nobreak\vskip\skip@ \prevdepth\dimen@}
Thus
\vglue 1cm plus .5cm minus .5cm
becomes
\afterassignment\vgl@\skip@=1cm plus .5cm minus .5cm
The assignment is performed by storing the specification in
the scratch register \skip@; then \vgl@ is expanded. It does \par
(as \vskip impliditly does) and records the \prevdepth (basically,
the depth of the last typeset line) and then typesets a zero
height rule, which is not discardable. The \nobreak prohibits a
break at the following glue and then the \prevdepth parameter
is restored, so to get correct computation of the interline glue.
Ciao
Enrico