My favorite is to use the .Net [IO.DirectoryInfo] class, which takes care of some of the logic. I actually use this for a lot of similar scripting challenges. It has a .Create() method that creates directories that don't exist, without errors if they do.
Since this is still a two step problem, I use the foreach alias to keep it simple. For single files:
[IO.DirectoryInfo]$to |% {$_.create(); cp $from $_}
As far as your multi file/directory match, I would use RoboCopy over xcopy. Remove the "*" from your from and just use:
RoboCopy.exe $from $to *
You can still add the /r (Recurse), /e (Recurse including Empty), and there are 50 other useful switches.
Edit: Looking back at this it is terse, but not very readable if you are not using the code often. Usually I have it split into two, like so:
([IO.DirectoryInfo]$to).Create()
cp $from $to
Also, DirectoryInfo is the type of the Parent property of FileInfo, so if your $to is a file, you can use them together:
([IO.FileInfo]$to).Parent.Create()
cp $from $to