Du musst natürlich irgendwie bestimmen, welche Werte auftauchen sollen. Im einfachsten Fall, dass im Abstand von 1 alle Werte von dem kleinsten Wert (also `#1`) bis zum größten Wert (also `#2`) ausgegeben werden sollen, kann man bei `\foreach` einfach die Pünktchenversion der Liste verwenden (siehe `pfg`-Anleitung, Abschnitt 83: »Repeating Things: The Foreach Statement«, ab »The dots notation«):
\documentclass[]{scrartcl}
\usepackage{tikz}
\newcommand{\kos}[2]{
\draw [color=gray!50] [step=5mm] (#1-1,-1) grid (#2+1,1); %Raster zeichnen
\draw[->,thick] (#1-0.5,0) -- (#2+0.5,0) node[right] {$x$};
\foreach \x in {#1,...,#2} \draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
}
\begin{document}
\begin{tikzpicture}
\kos{-4}{4}
\end{tikzpicture}
\end{document}
Will man mehr Kontrolle über die Liste, bietet es sich an, über ein weiteres Argument die Liste direkt zu beeinflussen. Hier ein Beispiel mit einem optionalen Argument:
\documentclass[]{scrartcl}
\usepackage{tikz}
\newcommand{\kos}[3][-1,...,1]{
\draw [color=gray!50] [step=5mm] (#2-1,-1) grid (#3+1,1); %Raster zeichnen
\draw[->,thick] (#2-0.5,0) -- (#3+0.5,0) node[right] {$x$};
\foreach \x in {#1} \draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
}
\begin{document}
\begin{tikzpicture}
\kos[-4,-2,-1,0,1,2,4]{-4}{4}
\end{tikzpicture}
\end{document}
Wenn es einen Algorithmus gibt, nach dem bei der Nummerierung vorgegangen werden kann, so kann natürlich auch dieser wieder in TeX gegossen werden. Lautet der Algorithmus beispielsweise, dass vom kleinsten bis zum größten Wert in einer-Schritten Markierungen gesetzt werden sollen, solange nicht explizit etwas anderes angegeben ist, so ginge das u. a. so:
\documentclass[]{scrartcl}
\usepackage{tikz}
\newcommand{\kos}[3][]{
\if\relax\detokenize{#1}\relax% Wenn das optionale Argument leer ist
\def\werteloop{\foreach \x in {#2,...,#3}}% in Einerschritten markieren
\else% sonst
\def\werteloop{\foreach \x in {#1}}% in der angegebenen Weise markieren.
\fi
\draw [color=gray!50] [step=5mm] (#2-1,-1) grid (#3+1,1); %Raster zeichnen
\draw[->,thick] (#2-0.5,0) -- (#3+0.5,0) node[right] {$x$};
\werteloop \draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
}
\begin{document}
\begin{tikzpicture}
\kos{-4}{4}
\end{tikzpicture}
\begin{tikzpicture}
\kos[-4,-2,-1,0,1,2,4]{-4}{4}
\end{tikzpicture}
\end{document}
oder ganz ohne Hilfsmakro dafür aber mit teilweiser Code-Verdoppelung:
\documentclass{scrartcl}
\usepackage{tikz}
\newcommand{\kos}[3][]{% #1 = Raster (optional), #2 = Startwert, #3 = Endwert
\draw [color=gray!50] [step=5mm] (#2-1,-1) grid (#3+1,1); %Raster zeichnen
\draw[->,thick] (#2-0.5,0) -- (#3+0.5,0) node[right] {$x$};
\if\relax\detokenize{#1}\relax% Wenn das optionale Argument leer ist
\foreach \x in {#2,...,#3}% das Standardraster verwenden
\draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
\else% sonst
\foreach \x in {#1}% das explizit angegebene Raster verwenden
\draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
\fi
}
\begin{document}
\begin{tikzpicture}
\kos{-4}{4}
\end{tikzpicture}
\begin{tikzpicture}
\kos[-4,-2,-1,0,1,2,4]{-4}{4}
\end{tikzpicture}
\end{document}
Nach welchem Algorithmus bei Dir vorgegangen werden soll, kann ich leider aus den gegebenen Informationen nicht erkennen.
Übrigens: Mit einer aktuelleren Version von KOMA-Script als Overleaf (der Online-Editor) derzeit bietet, kann man den Test auf das leere optionale Argument auch einfach mit `\IfArgIsEmpty{#1}{…}{…}` machen:
\documentclass{scrartcl}[2015/08/29]% Benötigt min. KOMA-Script 3.19
\usepackage{tikz}
\newcommand{\kos}[3][]{% #1 = Raster (optional), #2 = Startwert, #3 = Endwert
\draw [color=gray!50] [step=5mm] (#2-1,-1) grid (#3+1,1); %Raster zeichnen
\draw[->,thick] (#2-0.5,0) -- (#3+0.5,0) node[right] {$x$};
\IfArgIsEmpty{#1}{% Wenn das optionale Argument leer ist
\foreach \x in {#2,...,#3}% das Standardraster verwenden
}{% sonst
\foreach \x in {#1}% das explizit angegebene Raster verwenden
}%
\draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
}
\begin{document}
\begin{tikzpicture}
\kos{-4}{4}
\end{tikzpicture}
\begin{tikzpicture}
\kos[-4,-2,-1,0,1,2,4]{-4}{4}
\end{tikzpicture}
\end{document}\end{document}
Der von Dir ergänzte Algorithmus aus der Frage: alle Zahlen von der kleinsten bis zur größten durch 5 teilbaren Zahl im Intervall und zusätzlich -1, 0 und 1, wäre mit Hilfe der mathematischen Funktionen von `pgf` (siehe Teil VIII der `pgf`-Anleitung) beispielsweise so umsetzbar:
\documentclass{scrartcl}[2015/08/29]% Benötigt min. KOMA-Script 3.19
\usepackage{tikz}
\newcommand{\kos}[3][]{% #1 = Raster (optional), #2 = Startwert, #3 = Endwert
\draw [color=gray!50] [step=5mm] (#2-1,-1) grid (#3+1,1); %Raster zeichnen
\draw[->,thick] (#2-0.5,0) -- (#3+0.5,0) node[right] {$x$};
\IfArgIsEmpty{#1}{% Wenn das optionale Argument leer ist
\pgfmathsetmacro{\minfive}{int(div(#2,5)*5)}% kleinste durch 5 teilbare Zahl
\pgfmathsetmacro{\nextfive}{int(\minfive+5)}% nächst größere durch 5 teilbare Zahl
\pgfmathsetmacro{\maxfive}{int(div(#3,5)*5)}% größte durch 5 teilbare Zahl
\ifnum\nextfive>\maxfive\else
\foreach \x in {\minfive,\nextfive,...,\maxfive}
\draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$};
\fi
\foreach \x in {-1,0,1}% das Standardraster verwenden
}{% sonst
\foreach \x in {#1}% das explizit angegebene Raster verwenden
}%
\draw (\x,-.1) -- (\x,.1) node[below=4pt] {$\scriptstyle\x$}; % x-Achse beschriften
}
\begin{document}
\begin{tikzpicture}
\kos{-4}{4}
\end{tikzpicture}
\begin{tikzpicture}
\kos{-6}{4}
\end{tikzpicture}
\begin{tikzpicture}
\kos{-6}{10}
\end{tikzpicture}
\begin{tikzpicture}
\kos[-4,-2,-1,0,1,2,4]{-4}{4}
\end{tikzpicture}
\end{document}