I'm not familiar with the concept of a 'conditional relationship', but it sounds like you want joins between your users, groups and subscriptions tables to exclude rows in subscriptions that have expires < now() by default. I know this isn't possible in Postgres, and I suspect it is incompatible with SQL in general. It would be an interesting feature though!
Maybe you could update your data model and have two 'subscription' tables, one for current subs and one for expired subs?
Back to Class::DBI though - you could:
1) create a new method User->current_groups which fiddles with the SQL in a way that is appropriate (hacky but easy)
2) create a new Class::DBI::Relationship subclass (HasManyConditional) to implement the behaviour you want (clean but tricky)