Add subtitles to Blender with scripting
Simply create your required text objects by hand. Use Python to change the text data of the object and its location.

Simpler would be better.  Create objects manually in your case today.  When objects are placed in a group it is convenient. Group copying can easily be done in logarithmic steps. Double. Double. 2,4,8,16,32.  In Python one can interate over the members of the group.

I assume you are not trying to create some [ornate] user interface.

I suggest you create no new text objects via Python or cameras via Python at all.  Text objects set to empty string == "" will not be rendered.
I suggest you do not interact with the VSE editor by Python at all.

At least [copy] a finished text object, or its properties.  It  has the visual properties appearing in Blender 3D View.  Creating a new one from scratch, without huge overhead, gives you no visualization.  Since the render state of any object can be animated, visibility of the text need not determine its lifetime.

Thus you keep the Blender interface for attribute assignment.
Render out your text sequence as transparent .PNG file types.
Then import your .PNG sequence as a normal strip in the VSE manually. You stated [old school].
I know you will have more flexibility using the Blender 3D View [text] interface and [VSE] interface already present.

Know there are probably ten scripts or nodes that will change your text. Here at BSE or elsewhere with no monetary cost.  So you may need to write no Python.  Of course some Python is fun.  Of course if you are particular, none will achieve your most exotic cases.  Of course in the lastest version of Blender the VSE has simple subtitling.

At a Blender Python level many users who need to change something with a frame change use

frame_change = bpy.app.handlers.frame_change_post


The only part of the Python I would keep are a few lines.  Below is your software edited as a new starting point. Pseudo Code. No evaluation performed.

import bpy
import math
import random

str_text = ["Some Text","More Text"]
font_ob.data.body = str_text[0]
font_ob.location = (1.0, 2.0, 0.0)