Either option could work. You've highlighted the swings and roundabouts of the two approaches yourself. Having 100+ Wowza applications in one instance is not unknown. It does give you the individual monitoring and long term stats as you mention. It will add load to the server of course, and if all applications are active at the same time then you'll need to ensure that the backend housekeeping stuff such as updating stats database etc is able to operate. Fast (SSD) IO helps a lot there.
The alternative of having all streams in one application does as you also mention help with management and migration etc, but you'll lose individual monitoring and stats history available via the Engine Manager. There are third party reporting tools that can parse Wowza log4j log files, so that can be mitigated in that way. A quick Google of "wowza +reporting +logs" should show a few.
I'd say good practice would firstly be to ensure that it is manageable and you have the physical resource and network infrastructure in place to prevent any bottlenecks. We do provide a
load testing tool that can be useful to flush this out. If creating 100+ applications then another tip is to set the [instance-path]/conf/Application.xml as your template conf file and then when you create new apps this will be used as the basis so you don't need to keep reapplying custom modules/properties/specific Playback Types etc to each new app. If your clients are going to be RTMP only then you can also disable the HTTP Playback Types to remove unneeded packetizing, and even look at setting the StreamType to rtp-live which can help a lot with regards to network utilization by dropping connections to the IP camera source if clients are not connected.
There are probably a number of other things that could be suggested, but I'd personally just start small, test the results and build up from there.