It is not state of the art, since it is seldom needed:
If you have developed a certain functionality, why should you remove it, even if it is rarely used? Maybe your menus are too big, making it hard to find the often used things? But then you have several opportunities, like enabling some options only via a config file, let the user switch to an expert mode, where he can unhide some options.
Sometimes, the options might increase the complexity, so that you have to maintain many things, and with 4 options of type A, and 3 options of type B, you end in 3*4 functions to write, while 3*3 or 3*2 functions would be much less code.
But you have to be aware, that many functions might be used rarely, but can be important nonetheless. Maybe you have 100 users, which all use 90 functions. And every user uses one more function, for which he is the only user. But removing this function might render the whole program useless.
If your concern isn't so much the cost of development, or the user experience, but the size your program occupies in RAM, you might use plugins and lazy initialization to reduce it.
If big parts can be used independently of others, you could extract the rarely used parts, and provide 2 or more programs, each one smaller as the combination of both.