It's not really clear to me exactly what you're trying to achieve here. By and large you should try and think in terms of functional folds and unfolds rather than mutable updates.
A solution to the specific problem you've shown in your question is just,
scala> val llist = 1 :: 2 :: "foo" :: true :: HNil
llist: Int :: Int :: String :: Boolean :: HNil = 1 :: 2 :: foo :: true :: HNil
scala> llist.reverse
res0: Boolean :: String :: Int :: Int :: HNil = true :: foo :: 2 :: 1 :: HNil
The reverse
method on HList
is implemented as a fold (at both the type and value levels), and can be found here.