SSIS packages being stored as "blob" made them extremely ill suited to version control. Any tiny change (like just adjusting a task on a pipeline) usually made comparison between two versions practically impossible
I agree this is unbelievably annoying and makes collaboration hard. Instead of storing the scripts somewhere else, we actualy just use Matillion. For reviews/collab, we just screen share to show what changes we've made (to get around the blob problem).
Others have mentioned Python and Bash modules to call a Python script stored elsewhere. Another similar option is doing this, but calling/storing it in a Lambda script.