What measure can I use to select a number from a dataset which future values will most likely be closest to? Say I have a dataset that shows me the number of times per day someone has used a mobile app that I have developed.  And that dataset (after sorting) looks like this:
[2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 7, 12, 15, 15, 15, 15, 15, 15]

I want to return a number that I would bet is the number of times the user is going to use my app tomorrow or awfully close to it.  (Assume that I don't care about the order that these numbers were originally reported in the past 21 days.  I only want to predict and return a number based on magnitude alone.)
As a human analyst looking at this dataset, I would bet on the number 4.  The reason is not only are there a lot of natural occurrences of 4 but there are a lot of numbers that are awfully close to 4.
Is there a measure or existing algorithm that will return 4 from the above dataset?
Things I've tried:
The mode of this dataset is 15.  While this is interesting to note, I consider 15 to be an outlier in this set, as there are more values closer to 4 than 15.
The mean of this dataset is 7.5.  We are getting closer to 4, but the value closest to the mean - 7 - only occurs once.
The median of this dataset is 5.  Getting really close now, but still not what I want since there are only a few occurrences of 5.
The first quartile is 3.5.  This would be close enough, but I think it is luck that this happens to be close to the number I want.  I feel like with a differently distributed dataset the first quartile might be off.
I am a statistics novice, so there might be concepts regarding how to break down this problem that I am not yet familiar with.

To make this amenable to a rigorous analysis, you will need to specify a loss function. How bad is it to predict $x$ and obtain $y$, compared to a prediction of $z$? Once you have specified such a loss function, you can do a number of things. You may be able to find the value $x$ that minimizes your expected loss by simulation. For some loss functions, the minimizer is known.

I want to return a number that I would bet is the number of times the user is going to use my app tomorrow or awfully close to it

This to me sounds very much like you want to minimize the expected Mean Absolute Error (MAE),
$$ \text{argmin}_x E_y|x-y|, $$
where we assume that $y$ follows the distribution you have observed in your dataset.
If we can agree that the expected MAE is what you want to minimize, you are in luck, because it is known which quantity will do so, namely the median: Why does minimizing the MAE lead to forecasting the median and not the mean?
As you observed, the median here is $5$, not $4$, although there are more $4$s than $5$s in your dataset. The reason for this is that all the $15$s "pull" the argmin up - the chance of observing a $15$ means that predicting a $5$ is less costly than predicting a $4$.
We can run a very simple simulation of the expected MAE by resampling from your dataset and evaluating the MAE for various candidate predictions. (Actually, for a dataset that is as simple as yours, there is really no need to simulate, you can just tabulate.) In R:
dataset <- c(2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 7, 12, 15, 15, 15, 15, 15, 15)
set.seed(1) # for reproducibility
sims <- sample(dataset,size=1e5,replace=TRUE)

candidates <- seq(min(dataset),max(dataset))
emae <- sapply(candidates,function(xx)mean(abs(sims-xx)))
plot(candidates,emae,pch=19,xlab="Candidate",ylab="Expected MAE",las=1)


As you see, $5$ will lead to a slightly lower expected MAE than $4$.
Now, if this is not what makes you happy, then we need to find out what does make you happy... that is, we need to choose a different loss function. Once you do so, you can run a similar simulation and pick the minimizer. If you have tweaked your loss function just right, the minimizer will the $4$. (But of course, it makes more sense to think about what loss function makes more sense, rather than start with your desired outcome.)
Alternatively, perhaps your loss is better described by the squared distance $(x-y)^2$ between the prediction $x$ and the outcome $y$. If so, the minimizer would be the mean of your dataset (that the mean minimizes squared distances is a standard result in statistics) - as you observe, that is $7.5$.
