he Moose tutorial says you should try to __PACKAGE__->meta->make_immutable; which my current method doesn't allow me to do...
Yes, because make_immutable makes your class readonly so you can't add methods to it (at least not via the MOP).
You can however make a class mutable again with $class->meta->make_mutable and then make it immutable again after that with $class->meta->make_immutable. Of course there is a performance penalty with this, but it's not nearly as bad as you might think.
And lastly, I would suggest replacing
has $accessor => ( is => 'ro' );
with the more MOPish
$self->meta->add_attribute($accessor, (is => 'ro'));