Yes, varchar isn't capable of storing all the variations that a UTF-8 string requires. Trying to store UTF-8 data into a varchar field can result in data loss.
Saying that nvarchar is UCS2 is a bit misleading. Nvarchar is a storage format, and it is capable of storing UTF-16, just fine. It's the functions that act upon strings that don't support the surrogates in UTF-16. A minor difference, but an important one. If you aren't doing sorting, indexing, or comparisions on UTF-16 data, then nvarchar is just fine.
Secondly, "they didn't also add any other types that does fully support Unicode". It does FULLY support unicode 1.1. You are looking for features added after version 1.1 that involve multiple code points to character conversions (Surrogates). From what I have read, there have been many improvements in even SQL Server 2005 for supporting surrogates in SQL Server, but not all the functions were fully upgraded, so trying to use UTF-16 should be avoided at this time if possible. It's an unsupported feature. I suspect the beta documentation that would make such a claim would significantly lag behind the code that actually does it. As it affects many many different functions, it may not make it into the documentation until release to manufacturing even if support is fully added. Since the bulk of the problem is surrogate handling, I wouldn't be suprised if UTF-8 support was added at the same time. I am suprised that UTF-32 which handles all of the unicode code space without requiring the use of surrogates hasn't been implemented yet.
Also, I'm sure you are aware of the tradeoffs of UTF-8 vs UCS2 (and UTF-16 vs UCS2 for that matter):
UTF-8 requires much more processing than UCS2 because entire strings much be searched for surrogates before answering many common questions like how many characters are in this string? Operations like instr have added complexity because you must check if the binary representation of your string happens to fall within the opening of a surrogate pair, etc etc.
In order to ensure that you can correctly hold x number of characters in UTF-8 format, you must allocate four times the number of characters in bytes. UCS2 always requires 2 times the number of characters in bytes. This adversely affects page size, maximum characters per row, increases (doubles) the memory requirements for space allocation, etc.
There are many other reasons as well. But these reasons alone are enough to qualify UTF-8 as being a poor choice for a standard database encoding format. In fact, UTF-8 is like the complete opposite of database friendly. Where databases trade disk space for speed, UTF-8 tries to do the exact opposite, trading processing complexity for an average size reduction. Really, I can't think of any reason why I would want to store data in UTF-8 format within a database. I would like to see UTF-32 support though.
Back to your inital question however:
Varbinary would be appropriate because it is exactly what you are looking for. You want to store a variable amount of bytes into a field, and have the database assume nothing about the data. That is exactly what varbinary is for. Just make sure you define the varbinary field as having maximum size as 4 times the number of characters you want to be able to hold. It should perform the same as a nvarchar field that has the same number of maxiumum bytes.