Где на практике применяется рефлексия? Зачем она может в принципе понадобиться при написании проекта?
Рефлексия - это инструмент с помощью которого можно узнать всю информацию о классе: имена методов, параметры, поля, аннотации и т.д. 
Эти возможности во всю используются во фреймверках, таких как Spring, Hibernate...
Различные сериализаторы json/xml
Все что использует аннотации - уже использует рефлексию. Еще есть тонкая вещь которую мало кто знает - прокси. Можно обертку программно сделать для метода и делать действия до и после. Если не сплю и не забыл, то это активно используется в качестве базы для аспектов.