As with other constant variables,
\c_empty_box is intended as a fixed data point for use in for example comparisons. It should not be assigned and should be accessed using
\box_use:N in contexts where a
<box> is not marked as 'expected'.
expl3 language is intended for lower-level programming and so should not be expected to have equivalents of every LaTeX2e document command, and at the same time there are still areas to be developed. The high-level LaTeX2e
\mbox is a very different construct and is intended for inserting a horizontal box containing the given argument. Internally,
\leavevmode, and this uses
\voidb@x. The equivalence of
\voidb@x may have led to the confusion.
At present, there is still discussion to be had on how best to handle
\leavevmode functionality. What is almost certain is that it will be implemented using the equivalent of
rather than an unbox operation. This is because the construct above switches to horizontal mode such that this is complete before
\everypar is inserted, whereas the 'classical'
\leavevmode definition leaves the unboxing after the
\everypar tokens. (pdfTeX and LuaTeX have
\quitvmode to the same effect as the 'improved' defintion above, but XeTeX lacks this and in any case there is no gain from the additional primitive.)