A quite crude workaround is to set the table twice, the second time without background colors. Also the rule thickness can be increased by setting \arrayrulewidth:
\documentclass{article}
\usepackage{array}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\begin{document}
\setlength{\arrayrulewidth}{1.5\arrayrulewidth}% 50% thicker
\def\tmp{%
\begin{tabular}{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & contents \\
\hline
\end{tabular}%
}
\leavevmode
\rlap{\tmp}%
\begingroup
\renewcommand*{\cellcolor}[1]{}%
\tmp
\endgroup
\end{document}

Remarks:
- LaTeX removes spaces at the begin and end of a cell. But the space after
\cellcolor{...} is inside the cell and is not automatically removed.
Automation
The procedure can be automated to some degree. The following example at least supports column types l, c, r, p, m, b. Internals are redefined to catch the cell contents in boxes and to replace them with empty boxes of the same dimensions.
Unsupported are text inside @{...}, longtable, ...
\documentclass{article}
\usepackage{array}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\makeatletter
\let\org@insert@column\insert@column
\newcommand*{\dummy@insert@column@h}{%
\begingroup
\setbox0=\hbox\bgroup\begingroup
\org@insert@column
\endgroup\egroup
\setbox2=\hbox{}%
\wd2=\wd0 %
\ht2=\ht0 %
\dp2=\dp0 %
\copy2 %
\endgroup
}
\newcommand*{\dummy@endpbox}{%
\@finalstrut\@arstrutbox
\egroup
\begingroup
\setbox0=\lastbox
\setbox2=\hbox{}%
\wd2=\wd0 %
\ht2=\ht0 %
\dp2=\dp0 %
\copy2 %
\endgroup
\hfil
}
\newcommand*{\dummy@classz}{%
\@classx
\@tempcnta \count@
\prepnext@tok
\@addtopreamble{%
\ifcase \@chnum
\hfil \d@llarbegin
\dummy@insert@column@h
\d@llarend \hfil
\or
\hskip1sp\d@llarbegin
\dummy@insert@column@h
\d@llarend \hfil
\or
\hfil\hskip1sp\d@llarbegin
\dummy@insert@column@h
\d@llarend
\or
$\vcenter
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
$%
\or
\vtop
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
\or
\vbox
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
\fi
}%
\prepnext@tok
}
\newcommand*{\tabulardummysetup}{%
\renewcommand*{\cellcolor}[1]{\null}%
\let\@classz\dummy@classz
}
\newcommand{\tabularfix}[1]{%
\def\tabularfix@contents{\ignorespaces#1\ifhmode\unskip\fi}%
\leavevmode
\rlap{\tabularfix@contents}%
\begingroup
\tabulardummysetup
\tabularfix@contents
\endgroup
}
\makeatother
\setlength{\arrayrulewidth}{1.5\arrayrulewidth}
\begin{document}
\tabularfix{%
\begin{tabular}[t]{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & \multicolumn{1}{p{20mm}|}{contents} \\
\hline
\end{tabular}%
}
\bigskip
\begingroup
\tabulardummysetup
\begin{tabular}{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|@{\kern\tabcolsep}c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & \multicolumn{1}{p{20mm}|}{contents} \\
\hline
\end{tabular}%
\endgroup
\end{document}

hhlineorbooktabs. – Bernard Aug 31 '20 at 08:45