Use the Region functions in version 10
Update: Cube punctured by cylinder
Let's tackle the first issue, the cube punctured by the cylinder.
It's a matter of subtracting their regions.
(*Find the region of the solid cube *)
R5 = Cuboid[];
CubeRegion = ImplicitRegion[RegionMember[R5, {x, y, z}], {x, y, z}]
cubePlot =
RegionPlot3D[CubeRegion, PlotPoints -> 40, Axes -> True,
ImageSize -> 450];
(*Find the region of the cylinder *)
R0 = Cylinder[{{1/2, 1/2, 0}, {1/2, 1/2, 1}}, 1/4];
CylinderRegion = ImplicitRegion[RegionMember[R0, {x, y, z}], {x, y, z}]
cylinderPlot =
RegionPlot3D[CylinderRegion, PlotPoints -> 40, Axes -> True];
(*find their difference *)
differencePlot =
RegionPlot3D[RegionDifference[CubeRegion, CylinderRegion],
PlotPoints -> 40, Axes -> True, ImageSize -> 450];
(*show all 3 plots *)
GraphicsGrid[{{cylinderPlot, cubePlot, differencePlot}},
ImageSize -> 700]
The implicit regions below correspond to the solid cube and cylinder.
BooleanRegion
might also be used to find the difference region.

First Draft: Cube and Tetrahedron
I'm including my earlier response, despite the fact that it was quickly thrown together, because it gives some ideas about how to apply logical operations to regions defined in GraphicsData
.
The approach that uses ImplicitRegion
and RegionUnion
RegionUnion
logically joins the objects.
I thought a the objects would both be hollow since the data are from PolyhedronData[] but RegionFunction
returns filled regions (i.e solid objects). And that is what the OP is looking for.
Here is the region function for the cube. The center of the cube is at the origin.
PolyhedronData["Cube", "RegionFunction"][x, y, z]
2 z <= 1 && 2 x <= 1 && 2 y <= 1 && x >= -(1/2) && z >= -(1/2) &&
y >= -(1/2)
I shifted the cube 1/2 unit downward to offset it from the pyramid (filled tetrahedron with center at the origin.) This shift is achieved by adding 1/2 to the z:
PolyhedronData["Cube", "RegionFunction"][x, y, z+1/2]
2 (1/2 + z) <= 1 && 2 x <= 1 && 2 y <= 1 && x >= -(1/2) && 1/2 + z >= -(1/2) && y >= -(1/2)
I was sloppy about the positioning of objects. Some experimentation would be needed to apply transformations to the objects.
RegionUnion
R1 =ImplicitRegion[PolyhedronData["Cube", "RegionFunction"][x, y, z + 1/2], {x, y,z}]
R2 =ImplicitRegion[PolyhedronData["Tetrahedron", "RegionFunction"][x, y, z], {x, y,z}]
RegionPlot3D[RegionUnion[R1, R2], PlotPoints -> 100, Axes -> True, AxesLabel -> {"x", "y", "z"}]

RegionDifference 1
We can subtract the tetrahedron region from the cube region. Both the tetrahedron and the cube are treated as filled objects.
RegionPlot3D[RegionDifference[R1, R2], PlotPoints -> 100, Axes -> True, AxesLabel -> {"x", "y", "z"}]

RegionDifference 2
This subtracts the cube region from the tetrahedron region.
RegionPlot3D[RegionDifference[R2, R1], PlotPoints -> 100, Axes -> True, AxesLabel -> {"x", "y", "z"}]

RegionIntersection
RegionPlot3D[RegionIntersection[R2, R1], PlotPoints -> 100, Axes -> True, AxesLabel -> {"x", "y", "z"}]

,
RegionUnion,
RegionIntersection`, etc. will not work with mesh or boundary mesh regions in 3D. They will work with implicit regions, parametric regions, and their mixes. $\endgroup$