I know this question is rather old, but wanted to post my solution here. This solution has worked for me and I hope it may help someone else having the same issue.
I took the ideas from the previous answers and developed them a bit.
So generally speaking what you need to do is to create two lists, one for the files in the root directory and another one for directories (excluding the directory you'd want to omit). Then you need to concatenate these two lists together and put them into -Path parameter of Compress-Archive cmdlet.
Voila! It will create a .zip archive with all files and directories we need, preserving the directory structure.
$files = Get-ChildItem -Path /RootDir -File
$directories = Get-ChildItem -Path /RootDir -Recurse -Directory -Exclude DirToExclude
Compress-Archive -Path $($files + $directories) -DestinationPath Archive.zip