You might be able to do it but you'd have to manage your loading/programming pretty well.
First off, you'd have to had your core 'detect' the libraries and handle the fact that they might not be where expected.
Then you'd have to make sure your libraries had 'jump tables' or at least well defined entry points common to any change or enhancement you might make down the road.
Then you'd have to manage placement. Not only to insure that the libraries each sat on an erase block boundary to start, but also how then ended with the next snippet of code. And provide for a 'buffer' space to grow, as your replacements and/or upgrades may not be exactly the same.
Finally, you'd have to make sure your S-record updater and/or programmer was smart enough to know to only erase the sector/block that was referenced in an s-record, and to leave everything else alone.
Mike