I would say ,there’s nothing special regarding UE4 specifically. It’s a general thing across all engines. In short, you can either do it or you don’t. In a lot of cases the gains from doing this isn’t much these days. Also in a lot of cases you want to be able to see all sides of the model at some point. Maybe for placement variation, or movable objects, or whatever.
As far as lighting goes, you can have it cast 2 sided shadows, meaning the “open” side can also cast shadow. There are cases where this is problematic. But it shouldn’t be a huge problem overall.
I’ve worked both ways and to be honest, I think the mentality of getting rid of every last unseen polygon is more of an “old” way of squeezing out performance back when really low poly was the order of the day.
Usually this type of thing comes down to the balance. So lets say you take your little table and kill the underside faces. You save a few polygons. But now you’re limited to how you can use that table. What if you want to push one over, do you make one with and one without those faces?. That’s a much greater waste of memory. There’s always a trade off somewhere and you just need to make the choice of where you put that trade off.
There’s no right or wrong with this really. Like I said, I’ve done it both ways and sometimes I have gone back and added back faces and I’ve gone in and killed faces where I ultimately did not need them. You can always kill faces easily, but it’s much more work to add them back, so it’s worth making sure of that. In my current project, it’s probably the first project where I’m basically keeping all faces. I have not found the need to kill any faces. In the end, will I go and optimize some?.. I may very well do so, but, really it’s not actually required, I don’t think I’ll gain anything by doing so. I work with extremely low or optimized models in general.
Ultimately though, these days, really the gain for killing a few hidden polygons is not that great. Though it’s always better to work efficiently, keep good poly counts… etc. Worrying about some possible hidden faces is one of the less important things. Work efficiently in general and you won’t feel the need to kill a few polys here and there. It’s not like the old days where the difference of 1000 polygons can really help you. You need to kill 10’s or even 100’s of 1000’s of polys to make a dent on performance issues related to poly counts and in those cases, a few hidden faces isn’t gonna save you, in those cases you’ll have general problems there with overall need of optimizing other than hidden faces.