#JavaScript (ES6), 203201
t=>(T=h=>String.fromCodePoint(128336+h%12),[h,m,s]=s]=t.match(t+'::'/\d+/g).split`:`,
'It is currently '+T(h-=~10)+((-s?++m:m)?` with ${60-m?60-m+' minutes'+(-s?' and ':''):''}${-s?60-s+' seconds':''} until `+T(-~h):'')
)
t=>(
T=h=>String.fromCodePoint(128336+h%12),
[h,m,s]=s]=t.match(t+'::'/\d+/g).split`:`,
'It is currently '+T(h-=~10)
+(
(-s?++m:m)
? ` with ${60-m ? 60-m+' minutes'+(-s?' and ':''):''}${-s?60-s+' seconds':''} until `+T(-~h)
: ''
)
)
F=
t=>(T=h=>String.fromCodePoint(128336+h%12),[h,m,s]=s]=t.match(t+'::'/\d+/g).split`:`,
'It is currently '+T(h-=~10)+((-s?++m:m)?` with ${60-m?60-m+' minutes'+(-s?' and ':''):''}${-s?60-s+' seconds':''} until `+T(-~h):'')
)
var tid=0
function getTime(t)
{
var a=t.match(/\d+/g)
if (a) {
var [h,m,s]=a
h|=0, s|=0, m|=0
if(h>=0 & h<24 & m>=0 & m<60 & s>=0 & s<60)
return [h,m,s]
}
return null
}
function update()
{
clearTimeout(tid)
var t=I.value, a=getTime(t)
if (a) {
O.textContent = F(t)
tid = setTimeout(again,3000)
}
else {
O.textContent = 'invalid ' + t
}
}
function again()
{
var t=I.value, a=getTime(t)
if (a) {
var [h,m,s]=a
++s>59?(s=0,++m>59?(m=0,++h):0):0
h%=24
s<10?s='0'+s:0
m<10?m='0'+m:0
t = h+(-m-s?':'+m+(-s?':'+s:''):'')
I.value = t
O.textContent=F(t)
tid = setTimeout(again, 1000)
}
}
update()
#O { font-size:16px }
Time <input id=I value='12' oninput='update()' onkeydown='update()'>
(modify current time as you wish - but use valid values)
<pre id=O></pre>