This could be done with a dedicated datatype in user class that would register user object after account registration and then all the business logic written beside eZ Publish core features (dedicated model, cronjobs etc). It could also use an additional dedicated login handler to prevent the user from login in if expired. Subscription model of your choice could be applied in such case: just renewal confirmation, prepaid renewal etc. Definitely doable.