(This used to be answer post in Use of \scshape or \textsc with fontspec/xelatex - TeX - LaTeX)
Well, I was kinda bugged by all this smallcaps business, so I'll put this as a separate post here... Essentially, what bothers me is - where are the small caps glyphs taken from?
If I search for Junicode on my system, I get:
$ find / -xdev -iname '*junicode*' 2>/dev/null | grep '\.ttf'
/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/Junicode-BoldItalic.ttf
/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/Junicode-Regular.ttf
/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/Junicode-Italic.ttf
/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/Junicode-Bold.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-BoldItalicCondensed.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-BoldItalic.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-BoldCondensed.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-Regular.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-Italic.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-Bold.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-RegularCondensed.ttf
/usr/share/fonts/truetype/ttf-junicode/Junicode-ItalicCondensed.ttf
I can't really tell which exactly is used by xelatex - but there surely isn't a special 'smallcaps' .ttf font there.
Ok, then fontspec send this to log:
.................................................
. fontspec info: "defining-font"
.
. Font family 'Junicode(0)' created for font 'Junicode' with options
. [Ligatures=TeX,].
.
. This font family consists of the following shapes:
.
. * 'normal' with NFSS spec.:
. <->"Junicode/ICU:script=latn;language=DFLT;mapping=tex-text;"
.
. * 'small caps' with NFSS spec.:
. <->"Junicode/ICU:script=latn;language=DFLT;mapping=tex-text;+smcp;"
.
. * 'bold' with NFSS spec.:
. <->"Junicode/B/ICU:script=latn;language=DFLT;mapping=tex-text;"
.
. * 'italic' with NFSS spec.:
. <->"Junicode/I/ICU:script=latn;language=DFLT;mapping=tex-text;"
.
. * 'bold italic' with NFSS spec.:
. <->"Junicode/BI/ICU:script=latn;language=DFLT;mapping=tex-text;"
There is a bit on OpenType options in the manual fontspec.pdf; one of them is "smcp" which should specify small caps. Then again, what does it mean?
Then by accident I copy paste the small-caps text from the PDF to the text editor scite - and what can I see: small caps: "A" (and this shows in my Firefox too)! So, in this case, small caps are part of a Unicode mapping within a font?! So, I select the small "", look it up in gnome-character-map, and here it is:

Also in gnome-specimen, the small caps unicode characters can be rendered as bold:

Notice in gnome-character-map, I have entry only for "Junicode", and can choose "bold" and "italic" for it. The small caps "A" is "", code point U+F761, from the so-called "Private Use Area". So apparently this isn't a standard, but if I see it in both Junicode in gnome-character-map and in Firefox with unrelated font, maybe U+F761 can be seen as standard encoding for small caps A? Also found that U+F761 is known as "Asmall" in Adobe glyphlist.txt (via Glyph | Adobe Developer Connection; via Adobe Forums: OpenType small cap differences).
But I'm still puzzled - how come gnome-character-map shows small-caps A for both normal and bold 'Junicode' font; and yet xelatex complains?
In any case, after browsing through the fontspec.pdf manual, found another useful option, FakeBold ... And came up with an example, which finally proves to me there is no U+F761 in 'JunicodeBold':

... , but then why does gnome-character-map show it? (maybe it too uses 'FakeBold' :)) Indeed, font-forge finally confirms it:

At least, now I know that every font variant (bold.ttf, italic.ttf) should have small caps character glyphs, if fontspec should use them as respective small caps characters...
Now, I just wish I could easily tell fontspec: "When you encounter a request for U+F761 in Junicode-Bold - please refer to U+F761 in Junicode-Regular, and use that glyph with FakeBold=2.0" :)
Anyways, here is the code:
\documentclass[letterpaper,12pt]{article}
% \typeout{ == \the\paperwidth / \the\paperheight ==}
% \typeout{ == \the\pdfpagewidth / \the\pdfpageheight ==}
\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Junicode}
% http://tex.stackexchange.com/a/14382/2595
\makeatletter
\newcommand{\showfont}{encoding: \f@encoding{},
family: \f@family{},
series: \f@series{},
shape: \f@shape{},
size: \f@size{}
}
\makeatother
\begin{document}
{\scshape \showfont Aa}
{\fontspec[Letters=SmallCaps]{Junicode} \showfont Aa}
{\bfseries\scshape \showfont Aa}
{\fontspec[Letters=SmallCaps,FakeBold=2.5]{Junicode} \showfont Aa}
%kpathsea: Invalid fontname `Junicode Bold', contains ' '
{\fontspec[Letters=SmallCaps]{JunicodeBold} \showfont Aa}
{\fontspec{JunicodeBold} \showfont A J}
{\fontspec{Junicode} \bfseries\showfont A J}
{\fontspec{Junicode} \showfont A J}
\end{document}
Cheers!