Similar to the locktime
argument in the send
RPC.
The user would input either a block height or - preferably with a date picker - a date and time.
I assume a transaction with a future nLockTime would just stick around in the wallet and not get broadcast until that height is passed (because nobody would relay it). But I haven’t tested that.
This could be hidden by default, with a toggle in Options -> Wallet -> Expert.