Function Write-HostColoured{
[cmdletbinding()]
Param(
[parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Input,
[parameter(Mandatory=$true)]
[string]$ColouredProperty,
[System.ConsoleColor]$Colour = "Red"
)
# Get all the note properties of the object which we need for output and determining conditional formatting.
$properties = $input | gm -MemberType NoteProperty | Select-Object -ExpandProperty name
# Find the property with the longest length. Used for aligning output.
$longestProperty = $properties | ForEach-Object{$_.Length} | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
# Check if the property to colour requested is in $properties
If($properties -notcontains $ColouredProperty){Write-Warning "Input object does not contain the property $ColouredProperty"}
# Insert Line break between objects.
Write-Host
ForEach($singleObject in $Input){
$properties | ForEach-Object{
Write-Host ("{0,-$longestProperty} : " -f $_) -NoNewline
# Check if the property requires a colour formatting
If($_ -eq $ColouredProperty){
Write-Host $singleObject.$_ -ForegroundColor $Colour
} Else {
Write-Host $singleObject.$_
}
}
# Insert Line break between objects.
Write-Host
}
}
Import-Csv C:\temp\data.csv -header "Col123fff1","cl2","col3","col4" | Write-HostColoured -ColouredProperty Col3
Sample Output

Explanation
Think this will need to evolve based on your comment but lets start with this. It will take pipeline input from an object (tested with Import-CSV) and then simulate output of Format-List. While it is outputing using Write-Host if the property being processed matches the $ColouredProperty then apply the foreground colour defined by $colour.
This currently only works if you need to colour one column but I could see this taking a hashtable input for it conditional formatting as well.
Let me know if we are on the right track.
Conditional Colouring
You could easily make the colouring conditional base on criteria if you change the if statement and add another clause
If($_ -eq $ColouredProperty -and $singleObject.$_ -match "\d")
It makes the function less transferable but it would work. I used that to highlight all file names with numbers in them.
Get-ChildItem C:\temp -filter *.txt | Select Name,Length,Directory | Write-HostColoured -ColouredProperty Name

write-host -NoNewLinecould help with this. Potentially with complicated logic. What are your colouring conditions?