So understanding that things CAN be expanded on virtual ROM's that have to rely on it's proper assembly coding, does the data have to be compiled in the same manner in order for it to work? For example of what I mean is of how Konami compiled their Castlevania NES games and how Capcom compiled their Mega Man NES games in different programming formats. If one were to expand say like Mega Man I, does the expanded banked data have to be compiled and split up like the data of the ROM you are working on or can it be compiled into a forward and strait manner? Kinda like adding new, clean understandable and easy to follow assembly language onto the pre-existing, split up data.
It depends on the mapper. For most NES mappers, the last 16KB of PRG-ROM needs to stay at the end but you can double the PRG-ROM size (assuming it's not already at the maximum for its mapper) by adding empty space right before that last 16K.
Technically, there were several variants of many mappers. Such as mapper 2 "UxROM", There is UMROM, UNROM and UOROM. UNROM has a 128K PRG limit and UOROM has a 256K limit. With a ROM, you can just expand a UNROM ROM to UOROM pretty easily.
But one can assume when the games were originally written that the higher-capacity PCBs probably cost more to make which is why devs might not have always gone for the highest size ROM.