Boolean modifier difference but without filling in faces along the created "holes"
You could add a Solidify Modifier before the Boolean. Also, add a Weld Modifier after the Boolean.
Use a very small Thickness in the Solidify and make sure the Distance in the Weld is high enough, so that the newly created vertices from the Solidify get welded back together.
Regarding the Shading: That should go away if you enable Auto Smooth.