I came up with this, which might be a bit buggy but it fills the remaining space of the timeline with copies of the currently selected strip (the text editor and VSE must be visible for it to work).
import bpy
from bpy import context
for area in context.screen.areas:
if area.ui_type == 'SEQUENCE_EDITOR':
override = context.copy()
override['area'] = area
break
scene = context.scene
strip = context.scene.sequence_editor.active_strip
scene_length = scene.frame_end - strip.frame_final_start
strip_length = strip.frame_final_duration
count = int( scene_length / strip_length )
for i in range(count):
bpy.ops.sequencer.duplicate_move(override,
TRANSFORM_OT_seq_slide={"value":(strip_length, 0)})
The first half of the code is just to convince blender to look at the sequence editor.
The second half calculates how much space is left between the selected strip and the end frame, and how many copies it would take to fill that space, then repeatedly copies and slides the strip.
Note: this type of area override is being deprecated so it will stop working at some point (I couldn't get the new type to work).