You've more or less proven pointwise convergence of $f_n(x)$ to $f(x)$ for all x in $[0,1]$. On the other hand the sequence of functions is not uniformly convergent: for every integer $N$ there are an infinite number of points $x = r_n: n>N$ for which $f_N(x) - f(x) = 1$, and so the rate of convergence of $f_n(x)$ to $f(x)$ depends on the argument $x$.
As for Riemann integrability, $f_n$ is discontinuous only at $r_1, \ldots,r_n$, and so is continuous almost everywhere. As it is also bounded, it is Riemann integrable. $f$ however is nowhere continuous, so not Riemann integrable.
Let $f:=\lim f_n$, and let $\varepsilon >0$ be given. We have to show that if $n$ is large enough, then $$\vert f_n(t)-f(t)\vert\leq\varepsilon\quad \hbox{for all $t\in[a,b]$}\, .$$
Since $f$ is assumed to be continuous, it is uniformly continuous on the compact interval $[a,b]$. So we may find a subdivision $a=t_0<t_1\dots <t_K=b$ of $[a,b]$ such that the oscillation of $f$ on each interval $[t_i,t_{i+1}]$ is less than $\varepsilon/2$.
Since $f_n(t_i)\to f(t_i)$ as $n\to\infty$ for $i=0,\dots ,K$, one can find $N$ such that if $n\geq N$, then $$\vert f_n(t_i)-f(t_i)\vert\leq\varepsilon/2\quad\hbox{for $i=0,\dots K$}\, .$$
Let us check that $\vert f_n(t)-f(t)\vert\leq \varepsilon$ for every $n\geq N$ and all $t\in [a,b]$.
Fix $n\geq N$, and take any $t\in [a,b]$. One can choose $i$ such that $t\in [t_i,t_{i+1}]$. Since the functions $f_n$ are non-decreasing we have $$f_n(t_i)\leq f_n(t)\leq f_n(t_{i+1})\, . $$
Since $\vert f_n(t_i)-f(t_i)\vert$ and $\vert f_n(t_{i+1})-f(t_{i+1})\vert$ are not greater than $\varepsilon/2$, it follows that $$f(t_i)-\varepsilon/2\leq f_n(t)\leq f(t_{i+1})+\varepsilon/2\, . $$
Moreover, since the oscillation of $f$ on $[t_i,t_{i+1}]$ is less than $\varepsilon/2$ and since $t\in [t_i,t_{i+1}]$, we also have $f(t_i)\geq f(t)-\varepsilon/2$ and $f(t_{i+1})\leq f(t)+\varepsilon/2$. Altogether, this gives $$f(t)-2\varepsilon/2\leq f_n(t)\leq f(t)+2\varepsilon/2\, , $$
which concludes the proof.
Best Answer
Take $$f:[0,1]\rightarrow \mathbb{R}\\ f(x)=\left\{\begin{array}{rl} 0 & x\neq 1 \\ 1 & x=1\\ \end{array}\right. $$ And $$f_n=x^n$$ With scaling and piecewise definitions you can to this one for any countable set of $c_1,\dots ,c_n$ In general our function will look like $$f(x)=\left\{ \begin{array}{rl} 0 & x \neq c_i \forall i\\ 1 & \text{else} \\ \end{array}\right.$$ On $[c_i,c_{i+1}]$ we gonna have something like $$f_{ni}(x)=\left(\frac{c_2-x}{c_2-c_1}\right)^n +\left(\frac{x-c_1}{c_2-c_1}\right)^n$$
And all together we will have (with $I=[a,b]$) $$f_n(x)=\left\{ \begin{array}{rl} 0 & x\in [a,c_0)\\ f_{ni} & x \in [c_i,c_{i+1})\\ 0& x\in [c_n,b] \\ \end{array}\right. $$
Edit for a given function the idea is the following, as you only have finite $c_i$ you take with $$\varepsilon=\min_{1\leq i \leq n-1} \{d(c_i,c_{i+1})\}$$ which is the shortest distance between two points of incontinuousity. Edit we don't need Stone Weierstraß at all sry.
$[c_i+\frac{\varepsilon}{2n},c_{i+1}-\frac{\varepsilon}{2n}]$ we just take $f$ on the intervalls (the uniform convergence is trivial). So we only need to chose a secquence of function on $[c_i-\frac{\varepsilon}{2n},c_i+\frac{\varepsilon}{2n}]$. We will call them $s_{ni}$ (like spline).
We chose $$s_{ni}(x)= \left\{ \begin{array}{rl} f(c_i) + \frac{f\left(c_i-\frac{\varepsilon}{2n}\right)-f(c_i)}{\frac{\varepsilon}{2n}} \cdot (x-c_i) & x-c_i \leq 0\\ f(c_i)+\frac{f\left(c_i+\frac{\varepsilon}{2n}\right)-f(c_i)}{\frac{\varepsilon}{2n}}\cdot (x-c_i) & x-c_i >0 \end{array}\right.$$ Ok that one looks really complicated but all i am saying we make a line from the left end to the point we want to have $f(c_i)$ and another one to get a continuous function in all the intervall.