The only way to do this programmatically is to use WSProxy to update the DataExtension object. You are right, you need to update those three fields.
Here is an example call that will update a single Data Extension:
<script runat="server">
Platform.Load("core","1.1.5");
try{
var prox = new Script.Util.WSProxy();
var CustomerKey = "xxxxx-xxxx-xxxx-xxxx", //Insert DE External Key
IsSendable = "true",
SendableDataExtensionField = {"Name": "email", "DataType": "EmailAddress"}, //"Name" should be the name of the field holding the email address
SendableSubscriberField = {"Name": "Subscriber Key"}; //Use "Subscriber Key" or "Email Address" dependig on whethrer the SUBSCRIBER_KEY business rule has been turned on.
var res = prox.updateItem("DataExtension", {"CustomerKey":CustomerKey, "IsSendable":IsSendable, "SendableDataExtensionField":SendableDataExtensionField, "SendableSubscriberField":SendableSubscriberField});
Write(Stringify(res));
}catch(e){
Write(Stringify(e));
}
</script>
Note, that you will need to use updateBatch instead of updateItem to do a bulk update and the second parameter will need to be passed in as an Array of objects instead of a single item.
EDIT
I have written a blog post describing above, plus the method to update multiple Data Extensions in one batch: https://sfmarketing.cloud/?p=923