If you launch your shells via the reattach-to-user-namespace wrapper (as I describe in the documentation for the wrapper), all their children will be attached to the user bootstrap namespace, so you will not have to use it in your individual calls to (e.g.) pbcopy and pbpaste.
Alternatively, you could run just you instances of Vim via the wrapper to give it (and its children) access to the bootstrap namespace. That way, you should just be able to use the * register (if you have Vim 7.3 compiled with the +clipboard feature, i.e. practically any build of Vim besides the one that comes with OS X).
reattach-to-user-namespace vim …
# use "* inside Vim to access the OS X clipboard.
If you really want to avoid running the wrapper except for the ultimate processes that need it (e.g. pbcopy), then you can use Vim’s system() function. This is also how you would generically send some internal-to-Vim data to any (non-interactive) external command:
:call system('reattach-to-user-namespace pbcopy', getreg(''))
You might want to package this as a new command (so that you can more easily use it with different registers):
command -bar -register Pbcopy call system('reattach-to-user-namespace pbcopy', getreg(<q-reg>))
This new command can be used like this (the argument is the register name):
:Pbcopy "
:Pbcopy a
You could go one step further and make a mapping that calls the command:
nnoremap <F3> :<C-u>execute 'Pbcopy ' . v:register<CR>
You would use it by typing F3 or "aF3 (i.e. with a register prefix, like any other register-using, normal-mode command).