This answer explains that you can have different infill within the same part. Firstly the implementation in Ultimaker Cura is described, secondly how you can do this in Slic3r.
Ultimaker Cura
I've used a feature in Ultimaker Cura that can be used to alter the infill density locally. What you need to do is load your model into Cura, then load other objects (models) at the size of the area/volume you want your infill differently and position those at the position you want a different infill. Alternatively, you can add support blocker cubes that can be used as well. So basically, you use other models to intersect with your primary model to create intersections that can take a different infill percentage (please note that you can alter even more options, as long as you add these to the intersecting volume). This is extremely useful for lugs and brackets where you need some extra infill (e.g. extra stiffness for compression stresses) at the fastener holes. Note that this is an advanced feature which is not easy to use, but quite handy if you master it.
I could not find the video (on second thoughts, I think it was animated GIF) posted by Team Ultimaker, so I quote a section of one of their forum topics.
A short how-to: (italic font is not in the reference, but added to reflect recent version of Cura)
- Unselect "keep models apart" (now called: "Ensure models are kept apart") and "drop models to build plate" (now called: "Automatically drop models to the build plate") in Cura preferences
- Import a second object (for example a simple cube)
- Put Cura in "custom mode"
- Select the cube, and use the button "per object settings" on the left side
- Select "Infill Mesh" (now called: "Modify settings for infill of other models") and enable that setting
- The cube now turns transparent gray.
- Position the cube to overlap part of your model. It should overlap with the section that you want to change the infill for.
- Also with "per object settings" (now called: "Per model settings") select the option "infill density"
- Set it to the desired value. All is more or less illustrated in the screenshot below
- The picture shows a cube on the buildplate with infill 20 %. Locally, with a rotated 2nd cube, the infill % is raised to 100 %.
- What happens is that the volume where the cube intersects with your object is locally sliced with different infill.

Please find below another example of a simple bracket that has extra cylindrical objects loaded to create the intersections with the bracket at the fastener holes. In the example, the infill at the fastener holes is set to 99 %.

After slicing, you will see that the infill at the intersections is adjusted accordingly.

Note: I've tested this in Ultimaker Cura 3.4.1, and confirm it works. I sliced a part with the inserts for fasteners and it actually is not very difficult, it just requires a little more work. You will have to make some STL's of cylinders and position them correctly. If you make your own 3D models it will be a very easy task to add extra components while you design, positioning will be a lot more easy then (as they align with your model). An example is the following linear Z rod bracket of a Hypercube Evolution CoreXY printer, this bracket requires local reinforcements for the bolts clamping the bracket onto the aluminum extrusion profile:

Inserts are modeled together with the development of the bracket:

When combined, it looks like this:

Now the infill can be modified locally to 100 % to increase compression strength.
Note that this will also work if you want a different infill percentage at the first X layers, just use a large cube (larger than the model) and position it correctly. Note that Cura already has an option called "Gradual Infill Steps" to adjust the density at the top layers.
Slic3r
This reference describes how to do this for Slic3r in detail.
The blog describes the use of a simple volume (the green volume loaded from an STL file). After loading:
Right-clicking on the main part brought up the object settings menu.
From there, clicking "Load Modifier" and selecting the previously
saved model adds it to the part as a modifier.
The green "+" was selected and "Fill Density" was added to modifier
list and set to 100 %.

This shows that the functionality in Slic3r is very similar to the functionality in Ultimaker Cura.