Why put unpopulated components on a BOM?
If you don't explicitly document that these components are not to be placed, you will inevitably have your manufacturing team notice that there is a location on the board with no corresponding line in the BOM, and delay the build to send an engineering query asking what is supposed to be placed there.
Explicitly documenting not-placed components avoids these queries, much like "this page intentionally left blank" in the manual avoids people asking what was supposed to be printed on the pages that were blank in their copy.
This practice is not necessary. But when there is a QC worker checking the board assembly, and she finds an unpopulated component, she will wonder, is it a mistake or not. So she will go to BOM and chem with the DNP section.
It's true that this method can be messed up, just like any other method.
There are several reasons why we might have a board with positions for components, where none are fitted in the final product.
a) These components control options, so a single bare PCB might be populated differently go into products with different capabilities.
b) It's expensive to make a batch of PCBs. The design might have changed to fix an error, or enhance a feature, but there are 10,000 boards to be used up.
c) These are test points, or needed to set up some test mode, and are only used in the lab, and should not be fitted in the production unit.
For whatever reason, boards may require component footprints that are empty. Of the three options for an 'infinite value' resistor ...
1) fit a very large resistor, so large it has no effect
2) don't fit the resistor and keep quiet about it in the BOM and
3) don't fit the resistor and mention that fact in the BOM
1) is slightly more expensive
2) troubles engineers who read the documentation in PCB manufacturers, test houses, repair houses, because they are checking against human error, and want to be happy that the board in their hand is really described by the document in front of them (has the component fallen off? was missed by the assembly machine? removed in error?)
3) only confuses people who don't know yet why it's done that way