These types correspond to the "raw machine" types you would use in C: `Int#' (long int), `Double#' (double), `Addr#' (void *), etc. The primitive operations (PrimOps) on these types are what you might expect; e.g., `(+#)' is addition on `Int#'s, and is the machine-addition that we all know and love -- usually one instruction.
A numerically-intensive program using unboxed types can go a lot faster than its "standard" counterpart -- we saw a threefold speedup on one example.
Please see the very first part of the "state interface document" (distributed in `ghc/docs/state-interface.dvi') for the details of unboxed types and the operations on them.