The issue you are seeing is a limitation of your video file format. In order to get such high levels of compression, modern video is encoded such that only some frames are fully described. The remaining frames are described by how they differ from those frames coming before or after them. The frames of video that are based on a given full frame are called a GOP or group of pictures.
In many file formats, it is not possible to setup the video to start or end on a point that is not the beginning or end of a group of pictures without re-encoding which would result in quality loss. What your file splitter/joiner is likely doing is grabbing the nearest start/end of a group of pictures that includes the part of the video you wanted and starting/ending there. If the GOP is large, then this could potentially be some amount of time away from where you actually tried to make your cut.
You could use a transcoder to re-encode the footage, but this would result in a loss of detail since you would have an additional generation of compression loss. You could also possibly try moving it to a container that allows arbitrary start and end points when playing back (basically just skips the start and end of the GOP on playback) but that would depend on the video players you use supporting the feature and having the actual encoding in a codec that is supported by such a container format.