> Is there a specific advantage to using a container object that you have
in mind?

I think I'm mostly thinking of code clarity, extendability and composability. I've found this code somewhat challenging to read and understand and that concerns me.

> It makes the trace interface more consistent and less cluttered for
  users. 

That's fair. That is a benefit. 

> I think having separate classes for storage versus retrieval makes it
  clearer when defining custom backends which methods should be
  overridden for each class.

>This way, all traces are
handled the same, and functions like traceplot don't need to check
whether the trace is an instance of the single or multiple trace class.

I definitely agree a common interface to traces is a good idea. There are other ways to achieve this, for example, by always returning the container trace class.

> Also, when using non-memory backends, the distinction between single and
multiple trace isn't as clear to me because this will be made at the
level of the call to the database.

True, but in psample, each process still needs an individual object to record their traces.