It is possible to do at least some of what you mentioned. You will need to create a .globalvariables file and make some new variables, e.g., b_SendExpeditionAvailable. Then you need to create a .globalscripts file. The globalscript (and expression if you want to use that) will evaluate whether it is possible to send expedition based on ship availability, money available, b_SendExpeditionAvailable = 0 or 1. If 0, then it sets it to 1, deducts the money, and then you use "CallGlobalScriptAfter..." ...30 days or whatever, calling another globalscript that will generate a lootlist containing the items you want into a container of your choice or party stash, reset the variable to 0 (to allow the first globalscript to be available again), and also generate a popup for the player saying the expedition is complete. If you send a party member, there is a script that will set their status to "away" (and you would reset their status on the second script that is called after n days). To avoid repeats, you make global variables for each possible loot reward, and in the lootlist object for rewards, you set individual conditionals that prevent them from being outputted if they are 1, while using dataeventscript component on the item object itself to set the variable to 1 on recieved. This part is definitely possible to do (except for disabling the ship, I am not sure that is possible short of removing the ship- not sure if this is possible either).
Implementing it in dialogue and choosing the party member to send is the part I am not sure about. I think it should be possible to write in new dialogue but the conversation bundles are super tedious to figure out that I personally wouldn't want to touch them myself. It also seems that unlike the other files you can't partial overwrite or make insertions into conversation bundles either, the entire thing has to be overwritten so it is "risky" to mod them since future patches might incl. changes in those files.