Anything you can do from the command line you can also do from the JSON API which means that the same unlock command could be sent from within code just as easily. To my knowledge there is no pre-built utility capable of this, but the API is simple enough that I can't imagine it being terribly difficult to actually build such a tool.
Edit: It was much easier than expected to do this in Python. Assuming you have Python's JSON-RPC module installed just use this code:
from jsonrpc import ServiceProxy
from getpass import getpass
access = ServiceProxy("http://127.0.0.1:8332")
pwd = getpass("Enter wallet passphrase: ")
access.walletpassphrase(pwd, 60)
Similarly you could call access.walletlock()
to lock the wallet on demand and walletpassphrasechange(old, new)
to change the passphrase without ever having it see the command line.
Edit 2: I also submitted an issue to the devs on github on your behalf.
Edit 3: A pull request containing my python scripts has been accepted. Downloading the bitcoin source from github now includes scripts for this purpose in contrib/wallettools
Edit 4: A new bug report was filed to request that the builtin command behaves properly.