I think you can do this.
The site will require customers to self register. : you can so this via the Login Snippet (see
http://rtfm.modx.com/display/ADDON/Login.Basic+Setup) or you could do something using the Formit snippet.
Once registered the customer will be able to assign a serial number. -- your serial number here could just be the ID of the template, but the requirement to have it be unique makes this more complicated. You'll have to come up with your own custom way to map this: serial # --> Template ID.
Details for the template can then be entered added/or amended by the customer. -- not sure what you mean here. Does each SERIAL # need unique info? Or is it really the template? So if User A changes something on the template, does User B see it?
Unregistered users (members of the public) can search for serial numbers and review the details of associated templates. -- you'd have to build out a custom search form to search your custom data.
Serial numbers would have a subscription period. -- Sounds like your "templates" really should be normal MODX resources... that would make it much easier to add custom data and permissions to them. Maybe then your "Serial # --> Template ID" mapping could be as simple as looking up the page with the Serial # and then loading that page's template.
When the subscription period has expired the user would be able to extend/add a subscription and pay online. You'd have to build this out using a payment gateway like Stripe.com or FoxyCart.com -- there's nothing I know of to do this for you automatically.
Sounds like a fairly big project with a lot of customizations required.