This was definitely a case of not properly reading my own code. The prereq_list_out I'm returning is, go figure, NOT a ref cursor. It's a TABLE.
If you make get_reqs return a sys_refcursor instead of that custom type TABLE I'm using, and change the cursor.bind_param declaration to cursor.bind_param(':prereqs', OCI8::Cursor)
the oci8 call to return a cursor as an output bind_param will work. A solid and complete example of doing this can be found here: https://blogs.oracle.com/opal/entry/casting_plsql_arrays_as_ref_cu although you'll need to read around the fact that the guy at oracle is trying to solve a slightly different problem. He's not worrying about returning a cursor, he just does it. His example is about trying to get values out of a PL SQL Array.