In the "Object Lifetime" section you say "registers should be cleared upon last reference". That isn't safe, since there can be hidden dependencies on side effects of
__del__, e.g.:
process_objects = create_pipeline()
output_process = process_objects[-1]
return output_process.wait()
If the process class terminates the process in __del__ (PyQt5's QProcess does), then implicitly deleting process_objects after the second line will break the code.