I think this is exactly what I want (with just a little moreprocessing).  Thank you so much for the idea! 

I'm having a little bit of trouble getting the same output as you though, and I'm wondering if there might be a setting that I need to change. 

Here is what I tried, and the result. Do you have an idea of what is going wrong here?

Thank you!


------------
#+NAME:essay-rubric
- Category
  - A
  - B
  - C
  - D
  - F
- Writing
  - great
  - good
  - ok
  - lousy
  - awful

#+begin_src emacs-lisp :var contents=essay-rubric :results table
contents
#+end_src    

#+RESULTS:
#+begin_src emacs-lisp
| (("Category" |
#+end_src
-------------
On Wed, Jul 7, 2021 at 6:29 AM tbanelwebmin <tbanelwebmin@free.fr> wrote:
Hi Matt

Le 05/07/2021 à 21:44, Matt Price a écrit :
> I have to write a number of text-heavy documents which need to be
> delivered as tables with wrapped paragraphs in most cells. Working
> directly in table format is pretty arduous and uncomfortable.  Has
> anyone ever written a function to accept a list or subtree as input
> and process it into a table?
>
> If anyone has done something similar, I'd love some tips!

Maybe you could use builtin Babel
Hereafter you have a starting point
- Give a name to your input Org list
- Process it with Emacs-Lisp (or whatever language you are comfortable
with) to output it as a table


____ self contained Org Mode example _____

Example of a named list
#+NAME: BBB
- abc
  + 123
  + 456
- def
  + red
  + blue
- ghi
  + big
  + small

Example of converting the named list into a table with Emacs-Lisp
#+begin_src elisp :var bbb=BBB :results table
bbb
#+end_src

#+RESULTS:
| abc | (unordered (123) (456))   |
| def | (unordered (red) (blue))  |
| ghi | (unordered (big) (small)) |
___________________________________________